Rails 2.3.2 を使用しており、ネストされたオブジェクト フォームを適切に機能させようとしています。Rails が、accepts_nested_attributes_for 処理を開始するために必要な *_attributes を使用してネストされたフォーム要素を設定していないという問題に問題を絞り込みました。
私のモデルコードは次のとおりです。
class Person < Party
has_one :name, :class_name => "PersonName"
accepts_nested_attributes_for :name, :allow_destroy => true
end
class PersonName < ActiveRecord::Base
belongs_to :person
end
ビューのコードは次のようになります (HAML を使用しています)。
%h3 New customer
= error_messages_for :person, :person_name, :name, :country
- form_for :person, :url => collection_url, :html => {:class => 'MainForm'} do |person_form|
- @person.build_name unless @person.name
- person_form.fields_for :name do |name_form|
= name_form.label :given_name, "First Name:"
= name_form.text_field :given_name
= name_form.label :family_name, "Last Name:"
= name_form.text_field :family_name
= hidden_field_tag :inviter_id, params[:inviter_id]
= hidden_field_tag :inviter_code, params[:inviter_code]
%p= submit_tag "Create"
= link_to 'Back', collection_url
params の代わりに:
{"person"=>{"name_attributes"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
私は得る:
{"person"=>{"name"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
その結果、TypeMismatch 例外が発生します。Ryan Daigleのドキュメントに従いました。このブログとcomplex-forms-exampleのアドバイスにも従っています。
Firebug を使用して、フォームを調べ、入力タグの名前属性を name から name_attributes に調整しました。これにより、name_attributes を持つパラメーターが生成され、作成は正常に機能しました。
私のフォームが名前の *_attributes フォームを生成しない理由がわからないので、私は立ち往生しています。
私が試したもう1つのことは、自分の環境でcomplex_form_exampleが機能するようになったことです。コントローラー、モデル、ビューの隅々まで調べて、自分のコードと比較しました。何が違うのか見つけられません。私はこれが小さなことであることを知っており、助けていただければ幸いです!
ありがとう!