У меня проблема с тем, что мои классы публикуются на сервере, но не сохраняются, и я не могу понять, почему и был бы признателен за помощь в этом вопросе.
Прежде всего, возьмите класс моего аккаунта, который у него естьссылка на адрес и определяет как адрес выставления счета, так и адрес доставки.
class Account < ActiveRecord::Base
has_many :addresses, :as => :addressable, :dependent => :destroy
has_one :billing_address, :as => :addressable
has_one :delivery_address, :as => :addressable
accepts_nested_attributes_for :billing_address,
:allow_destroy => true,
:reject_if => missing_attrs?('street_one', 'zip', 'city', 'country_id')
accepts_nested_attributes_for :delivery_address,
:allow_destroy => true,
:reject_if => missing_attrs?('street_one', 'zip', 'city', 'country_id')
end
Теперь мои классы адресов выглядят следующим образом
class Address < ActiveRecord::Base
belongs_to :country
belongs_to :addressable, :polymorphic => true
validates_inclusion_of :type, :in => %w(BillingAddress DeliveryAddress ), :message => "Please speficy either billing or delivery address"
attr_accessor :street_one, :street_two, :zip, :city, :country_id, :region
end
class BillingAddress < Address
end
class DeliveryAddress < Address
end
Тогда у меня есть представление со следующей формой иЯ должен сказать, что в браузере все выглядит идеально, все поля есть, а имена соответствуют элементам массива и всем.
=semantic_form_for [:admin,@account] do |f|
= render 'shared/errors', :target => @account
=f.inputs
=f.semantic_fields_for :billing_address do |address|
=address.inputs name:"Billing Address" do
=address.input :street_one
=address.input :street_two
=address.input :city
=address.input :zip
=address.input :region
=address.input :country
=f.semantic_fields_for :delivery_address do |address|
=address.inputs name:"Delivery Address" do
=address.input :street_one
=address.input :street_two
=address.input :city
=address.input :zip
=address.input :region
=address.input :country
=f.semantic_fields_for :users do |user|
=user.inputs name:"Default user" do
=user.input :email
=user.input :password
=f.submit
Если я проверю это с помощью raise params.to_yaml
, то все будет выглядеть правильнополиморфные поля для адресации и типа отсутствуют.Я предполагаю, что, поскольку я встроил это в контроллер, мне нужно держать их в поле зрения, прежде чем отправлять их обратно в контроллер перед обновлением и созданием.Я прочитал этот пост , но не могу точно понять, что он делает.
Могу ли я дать ваши лучшие предложения, пожалуйста?