ユーザーモデルとプロファイルモデルを単一のフォームに表示しようとすると、* 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 1対多の関係の例がたくさんあるので、おそらくこれを間違った方法で行っているのでしょうか?
すべてのヘルプ、アドバイス、およびさらなる読書は大歓迎です:-)
乾杯、
サム