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

いいえ、これには実質的にユースケースがないためです。関連付けられたレコードがないとレコードが存在できない場合は、レコードが保存されないようにする必要があります。代わりに、ある種の疑似nullオブジェクトをシューホーンするのではありません。

最も近い近似は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

このコードは、作成時に1回だけ実行し、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 に答える