Атрибут таинственным образом устанавливается равным 1 - PullRequest
2 голосов
/ 05 сентября 2011

У меня есть объект, который, по-видимому, случайно устанавливается на id 1, а источник того, где это происходит, неизвестен в базе кода. Может быть в атрибутах обновления для пользователя, с которым связана школа.

Как я могу вызвать ошибку или иным образом записать в журнал, когда это происходит, чтобы я мог отследить и устранить ее?

Ниже приведена первая попытка, но, похоже, не учитывается update_attributes

belongs_to :foo_school, :foreign_key => 'school_id'

def foo_school=(foo_school)
  begin
    raise "Found" if foo_school == FooSchool.find(1)
  rescue Exception => e
    # Track it down through the stack trace
    Rails.logger.error e
  ensure
    write_attribute(:foo_school, foo_school)
  end
end

1 Ответ

2 голосов
/ 05 сентября 2011

Наблюдатель может сделать это за вас. Что вы делаете с этим наблюдателем, зависит от вас.

$ rails g observer Oddity

Добавьте это в config/application.rb (поищите «наблюдатель» в этом файле, по умолчанию есть пример). config.active_record.observers = :oddity_observer

class OddityObserver < ActiveRecord::Observer
  observe :foo

  def after_update(record)
    raise "Boom" if record.id == 1
  end 
end
...