跨表加入计数

时间:2011-12-09 18:49:35

标签: ruby-on-rails activerecord ruby-on-rails-3.1

我有三个对象(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 个答案:

答案 0 :(得分: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的更多信息,或直接找到您感兴趣的内容 countjoins