私のRails 4アプリプロジェクト(モデル)has_many
ビデオ(モデル)です。ビデオモデルに名前付きスコープがあります:
scope :live, where( is_deleted: 0, sent_to_api: 1 )
私のプロジェクトビューの1つでこれを行います(プロジェクトはプロジェクトのインスタンスです)。
project.videos.live.size
その特定のプロジェクトにあるプロジェクトの数ですが、代わりににあるビデオの数を取得しますanyプロジェクト。 .live
が.videos
からサブセットを返さず、代わりにそれを置き換えるかのようです。
私はそれが説明されているのを見る here 名前付きスコープを相互にチェーンすることは論理ANDと組み合わせる必要があるが、「関連付け方法」に適用すると[<--_.videos
の適切な用語がわからないこの状況]それは起こっていないようです。
これを行う正しい方法は何ですか?
Rails 4:
scope :live, -> { where(is_deleted: 0, sent_to_api: 1) }
Rails 4 docsとその中のすべての例は、呼び出し可能なオブジェクトをスコープに渡して、毎回確実に呼び出されることを示しています。このように機能しない場合は、クラスとして実装してみてくださいメソッドとそれがあなたのためにうまくいく方法を参照してください。
http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html
私はクラスメソッドを使用し、スコープは残しておきます。構文は、パラメーターを渡すことを含め、他のクラスメソッドと同じであるため、はるかに単純です。
試してください:
def self.live
where( is_deleted: 0, sent_to_api: 1 )
end
その後:
project.videos.live.size
それが役立つかどうかを確認します。
詳しくは こちら をご覧ください。