連絡先ディレクトリ用に次のモデルをセットアップしました
class Contact < ActiveRecord::Base
acts_as_citier
end
class Company < Contact
acts_as_citier
end
class Operator < Company
acts_as_citier
end
問題は、連絡先が会社であり、オペレーターがさまざまな属性を追加した一種の会社であるということです。
この特定のアプリケーションでは単一テーブルの継承が機能しなかったため、 citer gem を使用することにしました。
最終的に、モデルごとに 3 つのテーブルがあります。したがって、Company オブジェクトを追加すると、2 つのエントリが作成されます。1 つは Contact に名前属性のみがあり、Company テーブルの他の属性は両方のテーブルで同じ ID を共有し、両方のテーブルのタイプ フィールドが Company に設定されています。Operator を追加すると、3 つの全体が作成されます。つまり、各テーブルに 1 つずつ、同じ ID を共有し、最初の 2 つのテーブルの 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のテストがすべて同じメッセージで壊れています:(
すべての壊れたテストは、これらのモデルへの何らかの変更を伴うものであることに注意してください。