2012-01-15 17 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

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を参照してください。

+0

私はOPが2番目のスニペットのリファクタリングを望んでいると思いますが、質問は明確ではありません。 – tokland

+0

期待通りです。主にレコードのためにここに掲載したいと思っていました。 – tybro0103

関連する問題