2011-12-09 9 views
0

私は3つのオブジェクト(List, ListType and GlobalList)を持っており、特定のglobal_idと特定のlist_type_idを持つGlobalList内のアイテムの数を取得しようとしています。テーブル間の結合カウント

これは動作するようです:

select count(*) from globals_lists gl, lists l where gl.global_id=946 and gl.list_id=l.id and l.list_type_id=10; 

構造は以下の通りです:

class ListType < ActiveRecord::Base 
has_many: lists 
end 

class List < ActiveRecord::Base 
    has_many :global_lists 
    belongs_to :list_type 
end 

class GlobalList < ActiveRecord::Base 
    belongs_to :list 
end 

AR呼び出しを行うにはどのようにわからない - これではなく、参加上のどこに置くように見えることができます。 list_type_idは常に10になります。

a=GlobalList.where("global_id=?",119).joins(:list)

どのように私はこのActiveRecordのコールをしますか? Googleを介して見つけたものの大部分は名前付きスコープと関連していましたが、スコープなしでこれを実行できるはずです。

答えて

1

最初のアプローチ:

result = GlobalList 
    .select("COUNT(*) AS total") 
    .where("globals_lists.global_id=? AND lists.list_type_id=?",119, 10) 
    .joins(:list) 

次にあなたがresult.total

第二のアプローチを使用して、結果を占めることになるが、使用count方法の代わりに、select("COUNT(*) AS total")

GlobalList  
    .where("globals_lists.global_id=? AND lists.list_type_id=?",119, 10) 
    .joins(:list) 
    .count 

カントーであるあなたはActiveRecordのクエリについての詳細を見つけることができますインターフェイスin Rails Guides、または直接ご興味のあるものに countおよびjoins