Rails5, вложенная форма, неопределенный параметр
Хьюстон, у нас проблема:
class FirstModel
has_many :merged_models
has_many :second_models, :through => :merged_models
end
class SecondModel
has_many :merged_models
has_many :first_models, :through => :merged_models
end
class MergedModel
belongs_to :first_model
belongs_to :second_model
end
Форма:
<%= form_for(first_model) do |f| %>
<%= f.fields_for :merged_model do |ff| %>
<%= ff.label :date %>
<%= ff.date_select :start_date %>
Проблема:
Обработка FirstModelsController# создать в виде параметров HTML: {"utf8"=>"✓", "authenticity_token"=>"f+D8AaVzM6ahrUyo/nwxISFEleVrXGxo8m30sIiLIe7gvG8J9KfONjuT09j6zmoyTjj0jjjjjtjht_ht") "nh2" tj_ht "hj" nj "rht" h0 "tj" nj "tg_ht" nj "rj" tj "njt" hj "v0_1_ht" hj "v0_ht" ht "hj" rj "n_1" gt "h0" gt "ht" hd "ng" tj "n_1" gt "hd" n_d_ht "nj" rj "v0_1" gt "h0" gt "n_1" x_ht "nj" rj "v0_1_j" v_1_j "v_1_t_t_t_t_tj", "last_name"=>"yyy", "merged_model"=>{"start_date(1i)"=>"2017", "start_date(2i)"=>"2", "start_date(3i)"=>"28", "second_model_id"=>"1"}}, "commit"=>"Create"} Недопустимый параметр: merged_model Недопустимый параметр: merged_model
Сильные параметры первой модели контроллера:
params.require(:first_model).permit(:first_name, :last_name, merged_models_attributes: [:id, :start_date])
Первая модель принимает вложенные атрибуты объединенной модели:
accepts_nested_attributes_for :merged_models
Однако после создания FirstModel MergedModel не создается. Пытался создать его по форме:
<%= f.fields_for :merged_model [first_model.merged_models.build] do |ff| %>
Но получил:
неявное преобразование MergedModel в Integer
Не совсем понимаю, что это значит..
Также попытался создать новую MergedModel из действия создания FirstModel, с треском:
@merge_model = MergedModel.create!
И получил ту же ошибку - нет неявного преобразования...
Может ли кто-нибудь объяснить больше об этом? Я чувствую, что нужно передать массив параметров моего MergedModel в параметры MergedModel...? Я полностью потерян здесь...
2 ответа
Ваша форма должна иметь fields_for :merged_models
вместо просто merged_model
,
На свежих установках приложений Rails5, belongs_to
подразумевает optional: false
по умолчанию (ранее вызывался required: true
).
Вам нужно создать MergedModel
оба с FirstModel
А ТАКЖЕ SecondModel
Ассоциированные...
Похоже, вы пытаетесь создать MergedModel
только с FirstModel
связанный, если SecondModel
необязательно, вы должны сказать, что для belongs_to
с...
belongs_to :second_model, optional: true