2

私は、 Railscast 196の入れ子になったフォームに関する Ryan Bates のチュートリアルに従っています。

新しいアクションのフォームには、クイズのネストされた属性が表示されますが、キーのネストされた属性は表示されません。これは、クイズには has_many 関係があり、キーには has_one 関係があるためだと推測しています...しかし、何が間違っているのかわかりませんか?

どんな助けでも大歓迎です!

これは私のモデルです:

class Repository < ActiveRecord::Base
   has_many :quizzes, :dependent => :destroy
   has_one :key, :dependent => :destroy

   accepts_nested_attributes_for :key, :quizzes
end

これは私のコントローラーです:

def new
  @repository = Repository.new
  3.times { @repository.quizzes.build }
  @repository.key = Key.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @repository }
  end
end

これは私の見解です:

<div class="field">
  <%= f.label :wp_uid %><br />
  <%= f.text_field :wp_uid %>
<% f.fields_for :quizzes do |quiz_fields| %>
  <p>
    <%= quiz_fields.label :name, "Name" %><br />
    <%= quiz_fields.text_field :name %>
  </p>
<% end %>
<% f.fields_for :key do |key_fields| %>
  <div class="field">
  <%= key_fields.label :value, "Value" %><br />
  <%= key_fields.text_field :value %>
  </div>
  <div class="field">
  <%= key_fields.label :expiry, "Expiry" %><br />
  <%= key_fields.date_select :expiry %>
  </div>
<% end %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>
4

2 に答える 2

1

<%=%>を使用するようにfields_forブロックを変更してみてください

次のように変更してみてください:

<%= f.fields_for :key do |key_fields| %>

Rails 3で変更される前に、<%%>の代わりに<%=%>を使用するようにrailscastを作成できた可能性があります。

Ryanには、これにも役立つと思われるnested_formgemがあります。まだ使ってみませんが、次回は新しいプロジェクトを始める予定です。

https://github.com/ryanb/nested_form

于 2012-04-10T23:35:03.410 に答える
0

キーオブジェクトを次のように構築してみてください

@repository.build_key

レールのドキュメント http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Unsaved+objects+and+associationsから

オブジェクトを保存せずに has_one 関連付けに割り当てたい場合は、build_association メソッドを使用します。置き換えられるオブジェクトは、その外部キーを更新するために引き続き保存されます。

于 2012-04-10T23:50:48.633 に答える