0

テストにはメモリ内データベースを使用します。スキーマはすべてのテストで再読み込みされます。

最近、私の rspec は、テーブルが見つからないと文句を言います。その理由は、ロード時にスコープが別のモデルを参照しているためです。

class Item
  scope :public, where(:store_id => Store.public_store_ids())

class Store
  def self.public_store_ids
    self.public.pluck(:id)

問題は、アイテム モデルがメモリにロードされたときの初期化中に、ストア テーブルのスキーマがまだロードされていないことですが、私のスコープはパブリック ストア ID をクエリしようとするため、「テーブルが見つかりません」というエラーが発生します。 .

実行時に動的に評価するアイテム スコープを作成するにはどうすればよいですか? クエリが遅くなる可能性があるため、結合を使用したくなかったのですが、それが唯一の方法でしょうか?

4

1 に答える 1

0

実行時に評価されるように、クラスメソッドにすることができることに気づきました。

def self.public
  store_ids = BeautyStreet::Store.public_store_ids()
  where(:store_id => store_ids)
end
于 2012-12-20T03:54:00.107 に答える