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| %>