1

考虑我有 3 个表:用户 (has_many) -> 网站 (has_many) -> 访问。如果不编写普通的 sql 代码,如何找出每个用户的总访问次数?

我有一个我不太自豪的想法,因为我让 rails 来代替 mysql 做数学:

count = 0
user.websites.each |website|
    count += website.visits.count()

我是 Rails 的新手,也许我缺少一些文档。是否可以仅从查询生成器中找出该计数?

4

1 回答 1

0

您可以定义用户通过网站进行多次访问,如下所示:

class User < ActiveRecord::Base
  has_many :websites
  has_many :visits, :through => :websites
end

现在,如果你这样做

some_user.visits.count

这个sql被执行:

(0.4ms)  SELECT COUNT(*) FROM "visits" INNER JOIN "websites" ON "visits"."website_id" = "websites"."id" WHERE "websites"."user_id" = 1
=> 8 

也就是说,ActiveRecord 会为您创建 SQL 查询。

于 2012-07-24T00:37:20.027 回答