Отслеживание изменений поля с наблюдателями рельсов - PullRequest
10 голосов
/ 16 августа 2011

Я пытаюсь найти способ регистрировать изменения, когда кто-то обновляет объект. Прямо сейчас мой наблюдатель будет хранить все текущие значения, но я заблудился о том, как определить, какие поля изменились и как сохранить их в моей базе данных.

Для простоты приведем пример модели и наблюдателя. Моя цель - отследить, какое поле было обновлено, и сохранить его в моей базе данных Feed. Я открыт для добавления новых полей в мою базу данных, если они необходимы. Дайте знать, если у вас появятся вопросы.

Модель

# Table name: milestones
#
#  id            :integer         not null, primary key
#  name          :string(255)
#  project_id    :integer
#  target_date   :datetime

Наблюдатель отслеживает изменения

class MilestoneObserver < ActiveRecord::Observer

    def after_update(milestone)
        f = Feed.new(
          :action => milestone.name, 
          :project_id => milestone.project_id, 
          :updated_by_id => "Jordan")
        f.save
    end 
end

1 Ответ

12 голосов
/ 16 августа 2011

Чтобы узнать, какие поля изменились, выполните:

object.changes

См. Хорошую статью здесь: http://ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...