1

連絡先ディレクトリ用に次のモデルをセットアップしました

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のテストがすべて同じメッセージで壊れています:(

すべての壊れたテストは、これらのモデルへの何らかの変更を伴うものであることに注意してください。

4

1 に答える 1

2

私は少しいじくり回して、gemfile内のrails_sql_viewsgemのgitコースを読み取り元に変更することになりました。git://github.com/flwyd/rails_sql_views.git

それはスタックレベルの深すぎるものを取り除きました、しかし私は完全に新しいエラーを受け取ります-私のテストはまだ失敗しています-何らかの理由でそれは私のビューをテーブルとして扱います。これについて新しい質問をフォローアップします

- - アップデート - - -

私はそれを機能させ、spec / spec_helper.rbファイルにいくつかの変更を加え、次の2行をコメントアウトしました。

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

#DatabaseCleaner.strategy = :truncation

何らかの理由Database.strategyで、configが問題を引き起こしていました。これは、修正したが、どのように修正されたかがわからない場合の1つです。私はそれにいくつかの読書をします。その間、私のテストは正常に実行されています!

于 2013-02-03T06:55:19.150 に答える