Rails观察者没有被种子数据触发

时间:2011-02-26 14:34:26

标签: ruby-on-rails activerecord observer-pattern

在开发数据库中使用种子数据时,我遇到了让观察者触发的问题。

应用程序/模型/ item_observer.rb:

require 'grit'

class ItemObserver < ActiveRecord::Observer

  def create(item)
    Grit::Repo.init_bare(item.repository_path)
    logger.debug "doneit"
  end
end

分贝/ seeds.rb:

admin_rank = UserRank.create!({
  :title => 'Administrator',
  :permissions => Marshal.dump(Hash.new)
})

admin = User.create!({
  :username => 'admin',
  :password => 'password',
  :user_rank => admin_rank
})

url_operators = Item.create!({
  :creator => admin,
  :title => 'test game/something #1?',
  :description => 'this is an example of a game entry!?\'"#<>... obviously.'
})

在我的config / application.rb中,我有一行:

config.active_record.observers =:item_observer

为什么观察者的创建方法不会在rake db:seed RAILS_ENV = development上触发?我可以通过从ItemController调用Grit :: Repo.init_bare来创建Grit存储库。

(BTW,我的rails版本是3.0.3)。

3 个答案:

答案 0 :(得分:2)

不应该是after_create而不是仅仅在观察者中创建

require 'grit'

class ItemObserver < ActiveRecord::Observer

  def after_create(item)
    Grit::Repo.init_bare(item.repository_path)
    logger.debug "doneit"
  end
end

答案 1 :(得分:1)

我在开发中尝试调试观察者时发现的另一个原因是我需要启用类缓存。

 config.cache_classes = true

答案 2 :(得分:0)

还要确保在config / development.rb文件中设置了config.active_record.observers = :item_observer