1

我为联系人目录设置了以下模型

class Contact < ActiveRecord::Base
  acts_as_citier
end

class Company < Contact
  acts_as_citier
end

class Operator < Company
  acts_as_citier
end

问题是联系人可以是一家公司,而运营商是一种添加了不同属性的公司。

由于单表继承不适用于这个特定的应用程序,我决定使用citier gem。

最后,我为每个模型准备了三个表。因此,当我添加一个 Company 对象时,我得到了两个条目,即一个在 Contact 中只有名称属性和 Company 表中的其他属性在两个表中共享相同的 id,两个表的 type 字段都设置为 Company。如果我添加一个运算符,则生成三个整体,即每个表中的一个共享相同的 id,前两个表的 Type 字段设置为 Operator。

我的应用程序显然工作正常,但是我的所有测试都被破坏了,即那些与这些模型有关的测试 - 加上最糟糕的部分是堆栈级别太深,因为我收到以下所有错误测试的错误消息。

Failure/Error: Unable to find matching line from backtrace
     SystemStackError:
       stack level too deep
     # /home/ali/.rvm/gems/ruby-1.9.2-p318/bundler/gems/rails_sql_views-0cf1af369a5f/lib/rails_sql_views/connection_adapters/abstract_adapter.rb:23

rails_sql_views/connection_adapters/abstract_adapter.rb至少检查了文件中上述错误中的行号,它只有这一行:

 self.class.send(:alias_method, :tables, :original_tables_method)

我在这里使用的是 postgresql 数据库。

那是大约 300 个测试都被相同的消息打破了:(

请注意,所有损坏的测试都是那些涉及对这些模型进行任何类型更改的测试。

4

1 回答 1

2

我做了一些摆弄,最后改变了我的 gemfile 中 rails_sql_views gem 的 git 源以读取git://github.com/flwyd/rails_sql_views.git

这摆脱了堆栈级别太深的东西,但是我遇到了一个全新的错误-尽管我的测试仍然失败-出于某种原因,它将我的视图视为表格。我将对此提出一个新问题

- - 更新 - - -

我让它工作了,我在我的 spec/spec_helper.rb 文件中做了一些改动,并注释掉了以下两行:

#config.use_transactional_fixtures = true # because I'm not using fixtures here

#DatabaseCleaner.strategy = :truncation

出于某种原因Database.strategy,配置给了我一些问题——这是我修复它但并不真正知道它是如何修复的情况之一。我会做一些阅读。与此同时,我的测试现在运行良好!

于 2013-02-03T06:55:19.150 回答