You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中如何为simple_form的新建、编辑操作分别指定URL

问题根因

你传局部变量失败是Haml渲染局部模板的语法使用错误:当使用render '模板名'的简写语法时,局部变量可以直接作为键值对写在后面,不需要额外包裹locals: {}。你套了locals层之后,模板内只会识别到名为locals的变量,自然读不到单独的url和http_action参数。

修正方案

第一步:修改两个页面的渲染调用

去掉多余的locals包裹,直接传参:

  • 新建页面的渲染代码:
.mt-5
  = render 'form', url: partner_campaigns_path(@partner), http_action: :post
  • 编辑页面的渲染代码:
.mt-5
  = render 'form', url: campaign_path(@campaign), http_action: :patch

如果你习惯显式写locals的传参格式,必须同时显式声明partial参数,不能省略,写法如下,效果和上面一致:

= render partial: 'form', locals: { url: campaign_path(@campaign), http_action: :patch }

第二步:修改共用表单模板

在_form.html.haml里直接使用传入的参数即可:

= simple_form_for(@campaign, as: :campaign, method: http_action, url: url) do |f|
  -# 此处放所有共用的表单输入项
  = f.input :name
  -# 其余表单项、提交按钮保持原有逻辑即可

补充:实际上你不需要手动传http_action参数,Simple Form会自动判断@campaign对象是否已持久化:未持久化的新建记录自动用post方法,已持久化的编辑记录自动用patch方法,你只需要传入对应场景的url参数就能满足需求。

内容的提问来源于stack exchange,提问作者Dan Rubio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:03:35