Я использую Rails 2.3.2 и пытаюсь правильно обработать вложенную форму объекта. Я сузил свою проблему в том, что Rails не устанавливает мои вложенные элементы формы с * _трибутами, необходимыми для инициализации accepts_nested_attributes_for обработки.Rails Вложенная форма объекта * _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"}}, ...}
I получить:
{"person"=>{"name"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
В результате я получаю исключение TypeMismatch. Я следил за документацией от Ryan Daigle. Я также следовал советам от this blog и complex-forms-example.
Используя Firebug, я прошел через мою форму и скорректировал атрибут имени входных тегов от имени до name_attributes. Это создало params с name_attributes, и создание отлично работало.
Я застрял, поскольку не могу понять, почему моя форма не создает форму * _трибутов имени.
Еще одна вещь, которую я пробовал, - это то, что у меня есть complex_form_example, работающий в моей среде. Я прошел через каждый дюйм контроллера, моделей и просмотров и сравнил его с моим кодом. Я не могу найти, что по-другому. Я знаю, что это что-то маленькое, и я буду признателен за любую помощь!
Спасибо!
Как выглядит ваш код вида? –
Я добавил представление своего кода. –
Примечание: он не работает, если вы еще не определили параметр accepts_nested_attributes! Но в вашем случае все в порядке :). – reto