【问题标题】:Conditional Callback in Rails' model?Rails 模型中的条件回调?
【发布时间】: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

稍微清理一下就好了。

【问题讨论】:

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


    【解决方案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,但问题还不清楚......
    • 如我所料。主要是想把这个贴在这里记录一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2012-01-26
    • 2010-11-04
    相关资源
    最近更新 更多