TLDR:
В моих целях мне нужно было убедиться, что дочерняя ассоциация объекта формы заполнена новой записью. Первоначально дочерняя ассоциация родительского объекта вернула nil. Мне просто нужно было создать экземпляр объекта и правильно отобразить форму.
В случае, если кто-то приехал сюда из Google, у меня возникла та же проблема, что и у автора, но принятый ответ мне не помог.
Сначала немного фона. Когда вы используете простой fields_for
вместо f.fields_for
, поля отображаются по-разному. Обычная версия (как предложено выше) не связывает поля, представленные с объектом формы. Посмотрите на разные выводы:
fields_for
form_for @parent_instance do |f|
f.text_field :parent_field
fields_for :child_obj do |child_fields|
child_fields.text_field :child_field
end
end
Оказывает
<input id="parent_class_parent_field" name="parent_class[parent_field]" type="text" />
<input id="child_class_child_field" name="child_class[child_field]" type="text" />
Какие Rails будут анализировать эти параметры:
{ "parent_class" => {
"parent_field" => "Parent field value"
},
"child_class" => {
"child_field" => "Child field value"
}
}
f.fields_for
form_for @parent_instance do |f|
f.text_field :parent_field
f.fields_for :child_obj do |child_fields|
child_fields.text_field :child_field
end
end
Оказывает
<input id="parent_class_parent_field" name="parent_class[parent_field]" type="text" />
<input id="parent_class_child_class_child_field" name="parent_class[child_class][child_field]" type="text" />
Какие Rails будут анализировать эти параметры:
{ "parent_class" => {
"parent_field" => "Parent field value",
"child_class" => {
"child_field" => "Child field value"
}
}
}
Разница в том, что параметры дочернего объекта вкладываются только в родительский объект, когда вы используете f.fields_for
. Так что использование предложенного принятого ответа об использовании голого fields_for
не сработало для создания связанная запись.
Оказалось, причина f.fields_for
в том, чтобы ничего не отображать, была в том, что ассоциация детей была нулевой Чтобы исправить это и заставить мою форму правильно отображать и возвращают параметры правильно вложенным способом, я должен был создать такую ассоциацию в моем контроллере, как это:
def new
@parent = ParentClass.new
@parent.child_obj = ChildClass.new
end