Из документации для fields_for это:
подходит для указания дополнительных объектов модели в той же форме.
С примером, показывающим эту парадигму:
<%= form_for @person do |person_form| %>
First name: <%= person_form.text_field :first_name %>
Last name : <%= person_form.text_field :last_name %>
<%= fields_for @person.permission do |permission_fields| %>
Admin? : <%= permission_fields.check_box :admin %>
<% end %>
<% end %>
Примечание form_for @person
и fields_for @person.permission
- поля_для должны использоваться для связи модели, форма_для должна использоваться для самой модели. Причина, по которой ваш html отображает как user_profile[user_profile]
, заключается в том, что вы указываете @user_profile
в form_for
и fields_for
.
Скорее всего, вам нужно изменить параметр в form_for
на @user (или эквивалентную переменную, имеющуюся в области действия). Это сделает ваш вывод html:
user[user_profile][first_name]
, который вы можете передать в UsersController # update до тех пор, пока пользователь accepts_nested_attributes_for
user_profile. Если вы хотите вместо этого передать хэш параметра из формы в UserProfilesController # update, то вы хотите полностью отбросить fields_for
и просто отобразить поля в form_for @user_profile
- что даст вам html вроде user_profile[first_name]
.