Вложенные формы в рельсах - доступ к атрибуту в отношении 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.

Другие вопросы по тегам