Rails模型中的条件回调?

时间:2012-01-15 21:04:38

标签: ruby-on-rails ruby activerecord callback conditional

只是想知道是否有办法在Rails中进行条件回调。我知道你可以像这样进行条件验证:

validates_uniqueness_of :email, :if => (1==1)

我经常在回调中做这样的事情:

class LineItem < ActiveRecord::Base
  belongs_to :invoice
  belongs_to :line_item_group

  before_create :set_invoice_id
  def set_invoice_id
    unless self.invoice_id
      self.invoice_id = self.line_item_group.invoice_id
    end
  end
end

将它清理干净会很棒。

2 个答案:

答案 0 :(得分:12)

是的,你可以。

class Order < ActiveRecord::Base
  before_save :normalize_card_number, :if => :paid_with_card?
end

有关此主题的更多信息,请参阅http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks

答案 1 :(得分:10)

class LineItem < ActiveRecord::Base
  before_create :set_invoice_id, :unless => :invoice_id

  def set_invoice_id
    self.invoice_id = line_item_group.invoice_id
  end
end