如何修复 'TypeError - nil is not a symbol nor a string:'?
How to fix 'TypeError - nil is not a symbol nor a string:'?
我有两个动作 form_one
和 form_two
。一个是另一个的别名。
表单控制器
def form_one
@selected_tab = { form_type => :selected }
end
alias :form_two :form_one
private
def form_type
@form_type = params[:form_type]
end
我已经宣布这是 'get' 路线。它显示表格。我在模块中编写了 update
操作,并将该模块包含在 FormsController
中。还声明了更新路由。我有两个相同操作的选项卡。当从视图中选择一个选项卡时,该表单的 form_type
被发送到控制器私有方法 form_type
.
views/tabs:
%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
。
我将参数作为 form_type
传递给路径,但它仍然给出相同的错误。如果我在 form_type
方法中添加一个 or
条件,如下所示:
@form_type = params[:form_type] || 'form_one'
然后它只更新 form_one
的属性。如果删除条件,@form_type
是 nil
因为参数是 nil
.
当我更新特定表单的属性时,它们应该也会更新。但是在这里,参数在更新时作为 nil
传递。这怎么能做到?
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]
的价值
我有两个动作 form_one
和 form_two
。一个是另一个的别名。
表单控制器
def form_one
@selected_tab = { form_type => :selected }
end
alias :form_two :form_one
private
def form_type
@form_type = params[:form_type]
end
我已经宣布这是 'get' 路线。它显示表格。我在模块中编写了 update
操作,并将该模块包含在 FormsController
中。还声明了更新路由。我有两个相同操作的选项卡。当从视图中选择一个选项卡时,该表单的 form_type
被发送到控制器私有方法 form_type
.
views/tabs:
%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
。
我将参数作为 form_type
传递给路径,但它仍然给出相同的错误。如果我在 form_type
方法中添加一个 or
条件,如下所示:
@form_type = params[:form_type] || 'form_one'
然后它只更新 form_one
的属性。如果删除条件,@form_type
是 nil
因为参数是 nil
.
当我更新特定表单的属性时,它们应该也会更新。但是在这里,参数在更新时作为 nil
传递。这怎么能做到?
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]
的价值