我为联系人目录设置了以下模型
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 个测试都被相同的消息打破了:(
请注意,所有损坏的测试都是那些涉及对这些模型进行任何类型更改的测试。