这个是 Agile Rails 的一个例子 Code A
class Order < ActiveRecord::Base 
  before_validation :normalize_credit_card_number 
  after_create do |order|
    logger.info "Order #{order.id} created" 
  end
protected
  def normalize_credit_card_number
    self.cc_number.gsub!(/[-\s]/, '')
  end
end
Code B
class CreditCardCallbacks
  # Normalize the credit card number
  def before_validation(model) 
    model.cc_number.gsub!(/[-\s]/, '')             #b1
  end 
end
class Order < ActiveRecord::Base
  before_validation CreditCardCallbacks.new       #b2
  # ...
end
class Subscription < ActiveRecord::Base
  before_validation CreditCardCallbacks.new         #b3
  # ...
end
Code A 比较简单,但是 Code B 中我不是很能理解,Code B 是将方法抽取到 CreditCardCallbacks 类中,在 b1 处,为什么复写 before_validation, 并且带有一个 model 参数,而在,b2 和 b3 调用方法的时候参数却变成了 CreditCardCallbacks 的 instance ? 不是很明确其中的道理。请指教。提前感谢。