ruby-on-rails - rails : calling a model class in a library

标签 ruby-on-rails model-view-controller rspec

我正在尝试验证参数是 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/

相关文章:

ruby-on-rails - Datamapper:通过关联对结果进行排序

ruby-on-rails - 我如何按帐户确定 acts_as_taggable_on_stereoids 的范围?

model-view-controller - 从 EXTJS 4 MVC 中的 View 调用 Controller 方法

ruby-on-rails - Controller 规范未知关键字 : id

ruby-on-rails - 如何在 Rails 模型的构造函数中使用参数

ruby-on-rails - bundle 安装不适用于 capistrano

ruby-on-rails - 在Rails Controller 中需要 ruby gem

silverlight - UI和View在术语上的区别以及在哪种情况下正确

c# - .Net Core MVC - 无法获得 406 - Not Acceptable ,始终使用 Json 返回 200 OK

ruby-on-rails - 使用 Rspec 和 Capybara 测试登录重定向