Как исправить 'TypeError - nil не является ни символом, ни строкой:'? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть два действия 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

Я объявил, что это маршрут "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 в пути, но этопо-прежнему выдает ту же ошибку.Если я добавлю условие or в метод form_type, например, так:

@form_type = params[:form_type] || 'form_one'

, тогда он просто обновит атрибуты form_one.И если условие будет удалено, @form_type будет nil, потому что параметры nil.

Когда я обновляю атрибуты определенной формы, они должны обновляться.Но здесь параметры передаются как nil при обновлении.Как это можно сделать?

1 Ответ

0 голосов
/ 01 февраля 2019

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] при обновлении

...