Rails 模型中的条件回调?
Posted
技术标签:
【中文标题】Rails 模型中的条件回调?【英文标题】:Conditional Callback in Rails' model? 【发布时间】:2012-02-11 00:03:45 【问题描述】:只是想知道是否有办法在 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
稍微清理一下就好了。
【问题讨论】:
【参考方案1】: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
【讨论】:
你说得对,它不是正统的 SQL,我喜欢这样。 :) 我愿意为了更少的加入而牺牲常态。【参考方案2】:是的,你可以。
class Order < ActiveRecord::Base
before_save :normalize_card_number, :if => :paid_with_card?
end
有关此主题的更多信息,请参阅http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks。
【讨论】:
我认为OP想要重构第二个sn-p,但问题还不清楚...... 如我所料。主要是想把这个贴在这里记录一下。以上是关于Rails 模型中的条件回调?的主要内容,如果未能解决你的问题,请参考以下文章
Rails - 在before_destroy回调时取消销毁
Rails Rspec / Factory Bot没有调用模型before_save回调