Ruby on rails 使用'实现Rails回调;别名';关键词

Ruby on rails 使用'实现Rails回调;别名';关键词,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在使用alias方法实现Rails模型回调(保存后、保存前)等。它所做的只是将save方法化名为save\u,并使用\u回调。除了定义了save或alias关键字抛出错误后必须调用save之前的之外,它可以工作。我仍然在理解Rails回调是如何工作的,但是我想知道是否有一种方法可以在模型中的任何地方使用before_filter module ClassMethods def before_save class_eval do # old_save points to

我正在使用alias方法实现Rails模型回调(保存后、保存前)等。它所做的只是将
save
方法化名为
save\u,并使用\u回调
。除了定义了
save
alias
关键字抛出错误后必须调用
save
之前的
之外,它可以工作。我仍然在理解Rails回调是如何工作的,但是我想知道是否有一种方法可以在模型中的任何地方使用before_filter

module ClassMethods
  def before_save
    class_eval do
      # old_save points to save
      # save points to save_with_callbacks
      alias :old_save :save
      alias :save :save_with_callbacks
    end
  end
end

module InstanceMethods
  def save_with_callbacks
    @save_with_callbacks_text = 'Saving with callbacks'
    old_save
  end
end

class Task
  extend ClassMethods
  include InstanceMethods

  attr_reader :save_text, :save_with_callbacks_text

  def save
    @save_text = 'Saving'
  end

  # Needs to be called after save, save_with_callbacks are defined
  before_save
end

我忘记了用户通常不定义“save”方法,但让ORM来为您定义。将
save
方法移动到
InstanceMethods
,解决了问题