Условный обратный вызов в модели Rails? - PullRequest
5 голосов
/ 16 января 2012

Просто интересно, есть ли способ сделать условный обратный вызов в 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 ]

12 голосов
/ 16 января 2012

Да, вы можете.

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

Подробнее см. http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks.

10 голосов
/ 16 января 2012
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
...