Нужно ли сохранять поля для моего полиморфного адреса в представлении, чтобы Accept_nested_attributes_for работал? - PullRequest
1 голос
/ 10 февраля 2011

У меня проблема с тем, что мои классы публикуются на сервере, но не сохраняются, и я не могу понять, почему и был бы признателен за помощь в этом вопросе.

Прежде всего, возьмите класс моего аккаунта, который у него естьссылка на адрес и определяет как адрес выставления счета, так и адрес доставки.

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, то все будет выглядеть правильнополиморфные поля для адресации и типа отсутствуют.Я предполагаю, что, поскольку я встроил это в контроллер, мне нужно держать их в поле зрения, прежде чем отправлять их обратно в контроллер перед обновлением и созданием.Я прочитал этот пост , но не могу точно понять, что он делает.

Могу ли я дать ваши лучшие предложения, пожалуйста?

1 Ответ

0 голосов
/ 10 февраля 2011

Я добавил недостающие поля в форму, и теперь она работает отлично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...