5

ユーザーと技術者(つまり、ユーザー<アカウント、技術者<アカウント)の情報を保持するために、単一の「アカウント」テーブルを持つSTIモデルを使用しています。すべてが機能的な観点から機能しますが、単体テストを実行すると爆発します。

... 8)エラー:test_the_truth(UserTest):ActiveRecord :: StatementInvalid:PGError:ERROR:リレーション "technicians"が存在しません:DELETE FROM "technicians" .. ..

基本的に、標準フレームワークは、技術者とユーザーのテーブル(またはPostgreSQLがそれらを呼び出す「関係」)が存在しないことを認識せず、実際、アカウントにエイリアスする必要があります。

何か案は?私はRoRに比較的慣れていないので、STIをまとめてリッピングせずにこれを修正する方法に迷っています。

4

3 に答える 3

12

問題は次の存在が原因であることが判明しました。

./test/fixtures/technicians.yml ./test/fixtures/users.yml

これは、フレームワークが同様の名前のテーブルにデータを挿入できることが期待されるため、理にかなっています。

于 2009-03-15T01:14:45.267 に答える
2

子モデルの YAML ファイルを削除することで解決された同様の問題がありました。基本的に、Rails は /test/fixtures/ で作成されたフィクスチャを見て、それぞれのテーブルを空にしてリロードできるようにします。

私の場合、新しいフィクスチャを自動的に作成する script/generate model コマンドを実行しました。次に、適切な親クラスから継承するようにモデルを変更しました。まあ、フィクスチャがまだ存在していたので、レールはフィクスチャをロードする前に DELETE FROM child を試みていました。

本当にデータをプリロードする必要がある場合は、親モデルのフィクスチャを使用し、タイプ フィールドを適切なモデル名に設定する必要があります。

于 2010-04-26T15:54:12.273 に答える
0
  • アカウント テーブルに「タイプ」列が含まれていることを確認しましたか? STI を機能させるには 1 つ必要です。
  • 私は実際に「タイプ」と呼ばれる列でデータベースの互換性の問題を抱えており、それを軽減するために時々「種類」に切り替えました。それが問題かもしれません。基本クラス (アカウント) で self.inheritance_column = "kind" を設定してみて、それが役立つかどうかを確認してください。
于 2009-03-14T18:56:32.603 に答える