Rails 3: лучшее место для многоразовой функции под названием aftersave - PullRequest
1 голос
/ 07 января 2012

Мое приложение имеет очки / награды, которые могут быть достигнуты после ряда действий, которые обычно запускаются при добавлении записи (выполнение миссии и т. Д.)

Я написал довольно сложную функциюпроверяет все данные и присуждает надлежащее количество баллов, ранжирование пользователей и т. д. Это необходимо вызывать после сохранения каждой из этих записей.

Я знаю, что могу использовать Observers для вызова функциипосле сохранения ряда моделей, но мне неясно, где именно указана указанная функция и как ее вызывать.

Заранее благодарен!

1 Ответ

1 голос
/ 07 января 2012

Наблюдатели обычно входят в 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
...