Rails 3:可重复使用功能的最佳位置,称为aftersave

时间:2012-01-06 23:29:09

标签: ruby-on-rails-3 model observer-pattern

我的应用程序具有可在多个操作发生后实现的分数/奖励,这通常会在添加记录(完成任务等)时触发。

我写了一个相当复杂的函数来审核所有数据,并奖励适当数量的积分,用户排名等。这需要在保存这些记录之后调用。

我知道在一些模型保存之后我可以使用Observers来调用该函数,但我不清楚put函数的确切位置,以及如何调用它。

提前多多赞赏!

1 个答案:

答案 0 :(得分:1)

观察员通常进入app/models/。您可以使用命令rails generate observer YourModel自动为模型生成观察者类。这将生成文件`app / models / your_model_observer.rb'。

顺便说一句,aftersave不是一个非常具有描述性的方法名称。如果它做了很多事情,最好将它分解为几种方法,每种方法都做一件事,并给每个方法一个描述性的名称,例如:

class YourModelObserver < ActiveRecord::Observer
  def after_save your_model_instance
    calculate_points your_model_instance
    assign_awards    your_model_instance
  end

  private
  def calculate_points inst
    # ...
  end

  def assign_awards inst
    # ...
  end
end