如何修复 'TypeError - nil is not a symbol nor a string:'?

How to fix 'TypeError - nil is not a symbol nor a string:'?

我有两个动作 form_oneform_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_typenil 因为参数是 nil.

当我更新特定表单的属性时,它们应该也会更新。但是在这里,参数在更新时作为 nil 传递。这怎么能做到?

form_type 应通过 routeshidden 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] 的价值