1

我在 Rails 应用程序中有一个角色模型,我在其中编写了一些快速快捷方式类方法。这些方法本质上只是一些常用查找器的便利包装器。但这提出了一个严重的问题。如果我尝试在另一台具有干净数据库的计算机上加载该应用程序的架构,那么它将失败。这是因为 db:schema:load rake 任务首先加载整个 rails 环境,因此加载了我的类方法,这些方法正在数据库中寻找当然还不存在的记录。

所以有两个问题:

  1. 我不知道我理解为什么它在加载时运行该方法。
  2. 除非我为每种方法挽救错误,否则我不知道任何解决方法。

我是否缺少“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
4

1 回答 1

1

这里的错误不在于这些类方法,它们不会自行执行,而是你如何调用它们。

如果您在其他地方的初始化代码或模型代码中调用 Role.admin、Role.user 等,它将执行这些范围。

我建议在您的代码库中搜索对这些的引用。

此外,如果您发布错误的堆栈跟踪(当尚未填充 DB 时),它可能会提供线索来说明谁在调用这些。

于 2011-02-21T19:23:42.240 回答