我有以下型号:
用户:
has_one :extraction
提取:
belongs_to: user
has_many :pages
页数:
belongs_to :extraction
现在我想返回所有用户和每个用户的页数。我希望在一个查询中使用它。
@users = User.
joins("LEFT OUTER JOIN extractions on users.id = extractions.id INNER JOIN pages on extractions.id = pages.extraction_id").
select("users.*").
select("COUNT(pages.id) AS total_page_count").
uniq("users.id").
group("users.id").
order(build_order_string).
paginate(page: params[:page], per_page: custom_cookie_per_page_page_results)
返回其中一个测试用户有276
个页面。而如果我手动执行代码,即User.find(1).extraction.pages.count
,则会返回180
。我做错了什么?
感谢。
答案 0 :(得分:1)
这似乎过于复杂。这不会有诀窍:
# user.rb
has_one :extraction
has_many :pages, through: :extractions
然后使用页面加载用户:
@users = User.includes(:pages).order(...).paginate(...)
这只会生成两个查询,您可以按如下方式获取每个用户的页面数:
@users.each{ |user| puts user.pages.size }
答案 1 :(得分:1)
我有一个错字。
必须是:
joins("LEFT OUTER JOIN extractions on users.id = extractions.user_id INNER JOIN pages on extractions.id = pages.extraction_id").