我为联系人目录设置了以下模型
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对象时,我得到了两个条目,即一个只与名称attribuet联系,而Company表中的其他属性在两个表中共享相同的id,两个表的类型字段都设置为Company。如果我添加一个运算符,则会生成三个entires,即每个表中的一个共享相同的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个测试都被打破了相同的消息:(
请注意,所有损坏的测试都是涉及对这些模型进行任何更改的测试。
答案 0 :(得分:2)
我做了一些摆弄,最后在我的gemfile中更改了rails_sql_views gem的git cource以从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
配置给了我一些问题 - 这是我修复它但却不知道如何修复的情况之一。我会做一些阅读。与此同时,我的测试现在运行正常!