Я использую Rails 2.3.2 и пытаюсь заставить форму вложенного объекта работать правильно. Я сузил свою проблему до проблемы, заключающейся в том, что Rails не устанавливает мои вложенные элементы формы с * _attributes, необходимыми для инициации обработки acceptpts_nested_attributes_for.
Код моей модели:
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
Вместо параметров:
{"person"=>{"name_attributes"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
Я получаю:
{"person"=>{"name"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
В результате я получаю исключение TypeMismatch. Я следовал за документацией Райана Дейгла . Я также последовал совету этого блога и сложных форм-примеров .
Используя Firebug, я просмотрел свою форму и изменил атрибут name входных тегов с name на name_attributes. Это произвело параметры с name_attributes, и создание работало отлично.
Я застрял, так как не могу понять, почему моя форма не производит форму * _attributes имени.
Еще одна вещь, которую я попробовал, это то, что я получил complex_form_example, работающий в моей среде. Я просмотрел каждый дюйм контроллера, моделей и представлений и сравнил его с моим кодом. Я не могу найти то, что отличается. Я знаю, что это что-то маленькое, и буду признателен за любую помощь!
Спасибо!