2012-01-15 56 views
5

只是想知道是否有办法在Rails中进行条件回调。我知道你可以做一个有条件的验证,像这样: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 

这将是巨大的,清理一下了一点。

回答

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 
+0

你是对的,它不是正统的SQL,我喜欢这种方式。 :)我愿意为较少的联合而牺牲正常性。 – tybro0103 2012-01-16 01:45:12