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
Другие вопросы по тегам