私には何人かのプレーヤーがいて、プレーヤーには取引状態があります。「アクティブ」や「非アクティブ」などの取引状態をハードコードしてから文字列を探しに行かなければならないのではなく、プレイヤーが trade_state_id (プレイヤーは一度に 1 つの取引状態)。
ここで、名前付きスコープを使用してから「Player.active」と言うと、すべてのアクティブなプレーヤーを取得できると便利です。そのためには、「アクティブ」に一致する TradeState レコードの ID を取得する必要があるため、Player クラスで次のように考えました。
named_scope :active, :conditions => {:trade_state_id => TradeState.active.first.id}
これは、スクリプト/コンソールでテストすると魅力的に機能しますが、テストに行くと機能しません。私は RSpec を使用していますが、それは関係ないと思います。最も単純なテストを実行すると、次のエラーが発生します。
「誤って 4 になる nil の id と呼ばれる」
私の知る限り、テスト フレームワークはモデルをアルファベット順に読み込んで解析しています。フレームワークは Player モデルの named_scope 呼び出しを解析し、アクティブな最初の TradeState レコードの ID を忠実に検索します。ただし、そのモデルはまだ処理されておらず、準備ができていないため、nil の ID の取得に関するエラーが発生します。
最初は、trade_states テーブルにレコードがなかったのではないかと思ったので、before(:each) ブロックで必要な trade_states を作成して保存しましたが、うまくいきませんでした。それで、いくつかのフィクスチャを作成してロードしようとしましたが、うまくいきませんでした。
これはもっともらしいと思いますか?他の説明はありますか?回避策はどうですか?TradeState オブジェクトのモックを試すことができるので、やってみます。
お時間をいただき、誠にありがとうございました。