19

Rails 4 アプリのプロジェクト (モデル)has_manyビデオ (モデル)。ビデオ モデルに名前付きスコープがあります。

scope :live, where( is_deleted: 0, sent_to_api: 1 )

私のプロジェクト ビューの 1 つで、これを行います (プロジェクトは Project のインスタンスです)。

project.videos.live.size

私が期待しているのは、その特定のプロジェクトのプロジェクトの数ですが、代わりに、任意のプロジェクトのビデオの数を取得しています。.liveからサブセットを返すのではなく、それ.videosを置き換えるかのようです。

ここで、名前付きスコープを互いに連鎖させることは論理 AND と組み合わせる必要があると説明されていますが、「関連付け方法」に適用すると [<--.videosこのコンテキストでの適切な用語がわからない] 発生していないようです。

これを行う正しい方法は何ですか?

4

2 に答える 2

26

Rails 4では次のように読むべきだと思います:

scope :live, -> { where(is_deleted: 0, sent_to_api: 1) }

Rails 4のドキュメントとその中のすべての例は、呼び出し可能なオブジェクトをスコープに渡して、毎回呼び出されるようにすることを示しています。このように機能しない場合は、クラス メソッドとして実装してみて、それがどのように機能するかを確認してください。

http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html

于 2013-09-13T17:47:57.393 に答える