railscast #196をRails 4に再現しようとしていますが、いくつかの問題が発生しています。私の例では Rails 4:accepts_nested_attributes_forと質量代入
は、私が電話帳を生成しよう - それぞれの人が複数の電話番号 を持っている可能性をこれらの私のコントローラの重要な部分です:
class PeopleController < ApplicationController
def new
@person = Person.new
3.times{ @person.phones.build }
end
def create
@person = Person.create(person_params)
@person.phones.build(params[:person][:phones])
redirect_to people_path
end
private
def person_params
params.require(:person).permit(:id, :name, phones_attributes: [ :id, :number ])
end
end
が、これは私の新しいビューです
<h1>New Person</h1>
<%= form_for :person, url: people_path do |f| %>
<p>
<%= f.label :name %> </ br>
<%= f.text_field :name %>
</p>
<%= f.fields_for :phones do |f_num| %>
<p>
<%= f_num.label :number %> </ br>
<%= f_num.text_field :number %>
</p>
<% end %>
<p>
<%= f.submit %>
</p>
<% end %>
私の個人モデルにはhas_many :phones
とaccepts_nested_attributes_for :phones
、電話機モデルにはbelongs_to :person
があります。
私は次の問題があります。
- の代わりに3私はエラーを取得するフォーム送信するとちょうど1新しいフォーム
- であり、電話番号はフィールド:
ラインでActiveModel::ForbiddenAttributesError
@person.phones.build(params[:person][:phones])
個の
パラメータ:原則として
{"utf8"=>"✓",
"authenticity_token"=>"l229r46mS3PCi2J1VqZ73ocMP+Ogi/yuYGUCMu7gmMw=",
"person"=>{"name"=>"the_name",
"phones"=>{"number"=>"12345"}},
"commit"=>"Save Person"}
私は、フォームオブジェクトとして、この全体のことをやりたいが、私は私もaccepts_nested_attributesでそれを取得しない場合、私は、フォームとしてそれを行うにはチャンスがあるんだと思いますオブジェクト:(
yay!それは両方の問題を解決しました - 私がどれほどうれしいか言うことはできません!基本的なレールチュートリアルでは、ハッシュを使用しています:http://guides.rubyonrails.org/getting_started.html#the-first-form - 違いを詳しく説明できますか? – speendo
@speendo、あなたはシンボル対オブジェクトの使用の違いを意味する場合は、更新を参照してください。 – vee
はい、それを指摘してくれてありがとう! – speendo