У меня были некоторые проблемы с попыткой заставить *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 отношений один ко многим, так что, возможно, я делаю это неправильно?
Любая помощь, советы и дальнейшее чтение очень ценятся :-)
Ваше здоровье,
Сэм