2

Rails 3.2.X を使用しています。これは has_one 関係です。

ここではすべてがボタンで留められているようです。

class P < ActiveRecord::Base
  has_one :r
  accepts_nested_attributes_for :r
  attr_accessible :s, :r_attributes
end

class R < ActiveRecord::Base
  attr_accessible :a, :b, :c
  belongs_to :p
end 

フォームから投稿するもの

"p"=>{"s"=>"5/6/2012", "r"=>{"a"=>"hello", "b"=>"world", "c"=>""}}

短縮された P フォーム:

<%= form_for(@p) do |f| %>
<%= render :partial => "r/form", :locals => { :p_form => f, :r => @p.r } %>

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

短縮 R フォーム パーシャル

<%= p_form.fields_for(r) do |fr| %>

この R.new(params[p][r]) のように R を作成すると、正常に動作します。この P.new(params[p]) のように P を作成すると、R に保護された属性を大量に割り当てることができません (独立して動作しますが) r_attributes をアクセス可能として含めたことに気付くでしょう。

以下に指摘されているように、正しい答えは

<%= promotion_form.fields_for(:r) do |fr| %>
4

1 に答える 1

4

フォームは投稿する必要r_attributesがありrます: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

于 2012-05-20T06:04:07.143 に答える