我正在尝试验证参数是 Rails 中特定类的实例:
def schedule(action, *args)
if arg.is_a? Aircraft
...
end
end
我在库类中执行此操作(文件位于 lib/ 中),但出现未初始化的常量飞机 错误。 Aircraft 是一个模型类,在 app/models 中有相应的 aircraft.rb 文件。
我可以在库中使用模型类和实例吗?怎么办?
错误上下文:
错误发生在RSpec测试中;代码在浏览器中工作。我尝试在 _spec.rb 文件中要求模型,目前没有成功。
最佳答案
您可以在 Rails 库文件中使用模型类,而且您正在以完全正确的方式进行操作。 Rails 应该在引用 Aircraft 类时自动加载它。
因此,我们需要更多的上下文来弄清楚为什么它对您来说失败了。是否有可能在没有 Rails 环境的情况下加载 lib/文件?
解决这个问题的一种方法是明确要求模型文件 aircraft.rb。然而,您会发现这种方法很快就会导致精神错乱,因为它会以微妙而惊人的方式破坏 Rails 自动加载器。如果您使用 Rails 类加载器而不是反对它,Rails 会容易得多。
更新
因此,如果它在 RSpec 测试中,我们可以在规范文件中看到您用来加载环境的代码吗?它应该看起来像这样:
require File.dirname(__FILE__) + '/../spec_helper'
并且它需要位于文件的顶部。这是假设您安装了 RSpec Rails 插件 ( here ) 并且您拥有来自 RSpec 插件的默认 spec/spec_helper.rb 文件。如果没有这样的文件,尝试运行:
ruby script/generate rspec
关于ruby-on-rails - rails : calling a model class in a library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326277/