Почему <input>ID элемента повторяется во вложенной форме? - PullRequest
1 голос
/ 09 декабря 2010
class User
    has_one :user_profile
end
class UserProfile
    belongs_to :user
end

Я предоставляю форму для редактирования с использованием партиалов.

Представления:

user_profile/edit.html.erb
--------------------------
<%= render 'form' %>

user_profile/_form.html.erb
---------------------------
<%= form_for @user_profile do |f| %>
  <%= f.fields_for @user_profile do |builder| %>
    <%= render :partial => 'user_profiles/fields', :locals => { :f => builder } %>
    # id is correct i.e. [user_profile][last_name] for the field below 
    <%= f.text_field :last_name %>
  <% end %>
  <%= f.submit %>
<% end %>


user_profile/_fields.html.erb
-----------------------------
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>

# id's for the above fields are rendered as:
# user_profile[user_profile][first_name]
# notice the second repeated [user_profile]

Как это исправить, чтобы идентификатор получился как user_profile[first_name]вместо user_profile[user_profile][first_name]?

1 Ответ

1 голос
/ 10 декабря 2010

Из документации для 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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...