1

ユーザーモデルとプロファイルモデルを単一のフォームに表示しようとすると、* 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対多の関係の例がたくさんあるので、おそらくこれを間違った方法で行っているのでしょうか?

すべてのヘルプ、アドバイス、およびさらなる読書は大歓迎です:-)

乾杯、

サム

4

1 に答える 1

5

あなたのコードでは:

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

このように書く必要はありません(Rails 3の新しい動作のため):

<%= f.fields_for :profile do |profile_form| %>
于 2011-03-22T10:12:00.350 に答える