Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Вы можете сделать что-то вроде следующего:

<% 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'

Ответ 4

Вы можете использовать 'accepts_nested_attributes_for' для этого; но там есть небольшой трюк в формах:

Вы должны использовать единственное число и вызывать поля для каждого профиля, например:

<% form_for @user do |f| -%>
<% @user.profiles.each do %>
<% f.fields_for :profile_attributes, profile do |ff| -%>
<% end %>

Обратите внимание: : profile_attributes, а не только : профиль.