"类型"用作关键字在RSpec中引发异常但不在生产或开发环境中引发异常

时间:2016-11-27 03:29:19

标签: ruby-on-rails-4 exception rspec keyword rspec-rails

我正在开发一个使用"类型"的大型网络应用程序。作为许多表的数据库中的列。我理解“" type"是Ruby中的关键字,不应该用作列。但是,为什么我仍然可以在我的本地服务器上运行Web应用程序,并且生产环境中没有任何明显的问题?将使用"类型"作为一个专栏可能在未来造成任何麻烦?

这种行为更令人困惑,因为它确实导致我的RSpec功能测试在创建视频(其中一个资源)时失败,然后重定向到show视图。 (请注意,视频作为与几个表关联的属性,这些表具有"类型"作为列)。

这是引发的错误消息:

"The single-table inheritance mechanism failed to locate the subclass: 'reference'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Tag.inheritance_column to use another column for that information."

(从print page.body生成和显示的HTML中拉出来)

为什么会在我的测试规范中引发此异常,而不是在开发或生产环境中引发? (我负责整理测试规范,因此您可以在设备中找到解决此错误的方法,这也很有用!)

关于我的配置的说明:

  • 我使用的是Ruby 2.1.2和rails 4.1.1
  • 使用capybara,工厂女孩和capybara-WebKit作为网络驱动程序

1 个答案:

答案 0 :(得分:0)

事实证明,模式中有一个显式类型列,但它是从资源的子类中提取的。 RSpec出现问题的原因是我试图定义类型列而不将其作为子类。解决方案是在将数据输入到类型中时使用子类表示法。在我的情况下,这意味着类型列中的字符串需要放在:"Tags::Reference"而不是"reference"