我在rails应用程序中有一个角色模型,我已经编写了一些快速的快捷类方法。这些方法基本上只是一些常用查找器的便捷包装器。但这是一个严重的问题。如果我尝试在具有干净数据库的另一台计算机上加载该应用程序的架构,那么它将失败。这是因为db:schema:load rake任务首先加载整个rails环境,因此加载我的类方法,这些方法正在数据库中查找当然尚不存在的记录。
所以有两个问题:
我缺少'rails'或'ruby'方式吗?
这是我的示例代码:
Class Role < ActiveRecord::Base
def self.admin
find_by_name "Administrator"
end
def self.user
find_by_name "User"
end
def self.moderator
find_by_name "Moderator"
end
end
与要点中的相同代码:https://gist.github.com/836501
感谢您的帮助。
更新
事实证明,我忘了把这些类方法的调用从我的工厂放在一个块的旁边。
所以这个:
Factory.define :admin, :parent => :user do |f|
f.roles [Role.admin]
end
需要这样:
Factory.define :admin, :parent => :user do |f|
f.roles {[Role.admin]}
end
答案 0 :(得分:1)
这里的错误不是这些类方法,它们不会自己执行,而是你如何调用它们。
如果您在初始化代码或其他地方的模型代码中调用Role.admin,Role.user等,它将执行这些范围。
我建议在代码库中搜索对这些内容的引用。
此外,如果您发布错误的堆栈跟踪(当数据库尚未填充时),它可能会提供谁正在调用这些数据的线索。