我有两个动作form_one
和form_two
。一个是另一个的别名。
FormsController
def form_one
@selected_tab = { form_type => :selected }
end
alias :form_two :form_one
private
def form_type
@form_type = params[:form_type]
end
我已经宣布这是“获取”路线。它显示表单。我在模块中编写了update
操作,并将模块包含在FormsController
中。还声明了更新路由。我有两个相同操作的标签。当从视图中选择一个选项卡时,form_type
该形式下被发送到控制器私有方法form_type
。
视图/标签:
%span
= link_to 'Form_one' form_one_path(form_type: :form_one)
%span
= link_to 'Form_two' form_two_path(form_type: :form_two)
form_partial:
= form_for @form_type, url: form_path(@resource), method: :patch, remote: true, html: { class: 'form-horizontal' } do |f|
在显示表单时,参数已正确传递,但在更新时,参数以nil
的形式传递。
我通过PARAMS为form_type
的路径,但它仍然给出了同样的错误。如果我在or
方法中添加form_type
条件,如下所示:
@form_type = params[:form_type] || 'form_one'
然后它仅更新form_one
的属性。如果条件被去除,@form_type
是nil
,因为PARAMS是nil
。
当我更新特定表单的属性时,它们应该会更新。但是在这里,参数在更新时以nil
的形式传递。该怎么办?
答案 0 :(得分:1)
form_type
应该与routes
或hidden field
一起传递
如下-
= form_for @form_type, url: form_path(@resource, form_type: params[:action]), method: :patch, remote: true, html: { class: 'form-horizontal' } do |f|
=# hidden_field_tag :form_type, params[:action]
通过这种方式,您将能够在更新操作中获得params[:form_type]
的价值