在开发数据库中使用种子数据时,我遇到了让观察者触发的问题。
应用程序/模型/ 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)。
答案 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