是否存在用于在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
)执行此操作?
答案 0 :(得分: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
答案 1 :(得分: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