属性神秘地设置为id为1

时间:2011-09-04 20:27:22

标签: mysql ruby-on-rails ruby ruby-on-rails-3 error-handling

我有一个显然随机设置为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 个答案:

答案 0 :(得分:2)

观察者可以为您做到这一点。你对这位观察者的所作所为取决于你。

$ 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