如何解决“ TypeError-nil不是符号也不是字符串:”?

时间:2019-02-01 09:27:31

标签: ruby-on-rails action

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

当我更新特定表单的属性时,它们应该会更新。但是在这里,参数在更新时以nil的形式传递。该怎么办?

1 个答案:

答案 0 :(得分:1)

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]的价值