Нет вывода через fields_for при использовании отношения один к одному

У меня были некоторые проблемы с попыткой заставить *fields_for* производить вывод при попытке отобразить мою модель пользователя и профиля в одной форме, они используют отношения *has_one* и *belongs_to*.

Итак, вот выдержки из верхней части классов модели:

class User < ActiveRecord::Base
  has_one :profile
  accepts_nested_attributes_for :profile

class Profile < ActiveRecord::Base
  belongs_to :user

Контроллер довольно простой и стандартный:

  def new
    @user = User.new
  end

  def edit
    @user = User.find(params[:id])
  end

И вот фрагмент из представления в том виде, в котором оно есть в настоящее время:

<%= form_for(@user) do |f| %>

  <% f.fields_for :profile do |profile_form| %>
    <div class="field">
      <%= profile_form.label :name %><br />
      <%= profile_form.text_field :name %>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Я пробовал другие вещи, например:

 <% fields_for @user.profile do |profile_form| %>

И все работает нормально, если я вручную добавляю поле:

  <div class="field">
    <label for="user_name">Name</label><br>
    <input id="user_name" name="user[profile_attributes][name]" size="30" type="text" value="<%= @user.profile.name %>">
  </div>

Стоит отметить, что я новичок в рельсах и не совсем уверен, как эти функции работают под капотом, хотя я прочитал документация и руководство. Также в моих поисках много примеров fields_for отношений один ко многим, так что, возможно, я делаю это неправильно?

Любая помощь, советы и дальнейшее чтение очень ценятся :-)

Ваше здоровье,

Сэм


person Sam Leicester    schedule 22.03.2011    source источник


Ответы (1)


В вашем коде:

<% f.fields_for :profile do |profile_form| %>

Разве это не нужно писать так (из-за нового поведения Rails 3):

<%= f.fields_for :profile do |profile_form| %>
person Marcel Jackwerth    schedule 22.03.2011
comment
Я так и знал, что будет что-то простое - спасибо большое :-) Запустил рейл только с 3 версии, бывает сложно при поиске посмотреть отличия между версиями хотя что-то подобное можно легко пропустить. Есть что почитать по этому поводу? - person Sam Leicester; 22.03.2011
comment
Не совсем. Помощников было сложно писать в Rails 2 (хотя они более эффективны с точки зрения памяти), если они использовали блок ERB (do %> ... <% end). В Rails 3 они решили просто заставить все работать как простую строку. Таким образом, если вы забудете добавить =, строка не будет напечатана. Но во многих примерах из Rails 2 раза не будет этого = — предостережение. - person Marcel Jackwerth; 22.03.2011
comment
Я изо всех сил пытался заставить это работать в течение 2 часов. Вы полностью спасли мой бекон с этим - просто жаль, что я не погуглил его раньше! Большое спасибо! - person John Gallagher; 20.10.2011