1

是否有用于在 AR 关系中创建对象的 DSL,这与:dependent => destroy(换句话说,创建一个对象,使其始终存在)相反。比如说,我有以下内容:

class Item < ActiveRecord::Base
  #price
  has_one :price, :as => :pricable, :dependent => :destroy
  accepts_nested_attributes_for :price
  ....

class Price < ActiveRecord::Base
    belongs_to :pricable, :polymorphic => true
    attr_accessible :price, :price_comment

我想我希望每次都创建一个价格,即使我们没有指定价格?是作为回调执行此操作的唯一(或最佳)选择,还是有办法通过 DSL(类似于:denpendent => :destroy)执行此操作?

4

2 回答 2

0

不,因为这几乎没有用例。如果您的记录在没有关联记录的情况下无法存在,则您可能应该阻止记录被保存,而不是硬塞进某种伪空对象来代替它。

最接近的近似值是before_save回调:

class Item < ActiveRecord::Base
  has_one :price, :as => :pricable, :dependent => :destroy
  accepts_nested_attributes_for :price

  before_save :create_default_price

  def create_default_price
    self.price ||= create_price
  end

end
于 2012-09-13T17:19:37.780 回答
0

您应该只在创建时运行此代码一次,并在create_price此处使用便捷方法:

class Item < ActiveRecord::Base
  has_one :price, :as => :pricable, :dependent => :destroy

  accepts_nested_attributes_for :price

  after_validation :create_default_price, :on => :create

  def create_default_price
    self.create_price
  end
end
于 2012-09-13T17:36:18.420 回答