Вложенные формы в рельсах - доступ к атрибуту в отношении has_many
У меня есть пользователь и модель профиля. Один пользователь может иметь много профилей. Мне нужно получить доступ только к одной информации из раздела профилей (а именно к номеру телефона) в моей модели пользователя в процессе создания пользователя. Поэтому я пытаюсь сделать это через attr_accessible
, Мой user.rb выглядит так.
has_many :profiles
attr_accessible :handle, :email, :password, :profile_mobile_number
attr_accessor : :profile_mobile_number
Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь вызвать метод getter profile_mobile_number в методе из user.rb (метод является закрытым, хотя я думаю, что это не имеет значения), я получаю нулевое значение. Я использую следующее в моей форме users/new.html.erb
Мой вопрос: как правильно это сделать? Должен ли я использовать <% f.fields_for :profile do |ff| -%>
или же <% f.fields_for :profiles do |ff| -%>
(обратите внимание, что второй - во множественном числе). Когда я использую множественное число: профили, я даже не вижу полей в форме. Что мне здесь не хватает? А какое время нужно использовать в модели user.rb?:profile_phone_number или: profile_phone_number? Благодарю.
4 ответа
Вы можете сделать что-то вроде следующего:
<% form_for @user, :url => { :action => "update" } do |user_form| %>
...
<% user_form.fields_for :profiles do |profiles_fields| %>
Phone Number: <%= profiles_fields.text_field :profile_mobile_number %>
<% end %>
<% end %>
Но так как у вас уже есть ассоциация, то вы можете использовать ' accepts_nested_attributes_for'
Вы должны смотреть RailsCasts Nested Model Form.
спасибо Райану Бейтсу за отличную работу.
http://apidock.com/rails/v3.2.8/ActionView/Helpers/FormHelper/fields_for
Этот список ссылок на API-интерфейс содержит множество примеров вложенных атрибутов, включая один-к-одному, один-ко-многим. Это очень полезно!
Вы можете использовать ' acceptpts_nested_attributes_for', чтобы сделать это; но есть небольшая хитрость в формах:
Вы должны использовать единственное число и вызывать fields_for для каждого профиля, например так:
<% form_for @user do |f| -%>
<% @user.profiles.each do %>
<% f.fields_for :profile_attributes, profile do |ff| -%>
<% end %>
Обратите внимание, что это : profile_attributes, а не просто : profile.