我需要在subselect中计算其他表中的行,所以我使用这个查询:
follows_sql = Follow.where(followable_type: 'Idea').where('follows.followable_id = ideas.id').select('COUNT(followable_id)').to_sql
idea = Idea.select("(#{follows_sql}) AS fcnt").includes(:collaborations).
where(collaborations: { user_id: 4, owner: true })
所以它产生了有效的SQL,但我无法访问' fcnt'来自idea var的价值。我尝试用不同的方式做到:
idea[0].fcnt # return nil
idea[0]["fcnt"] # return nil
答案 0 :(得分:1)
我认为以下内容应该对你有用
idea = Idea.select("ideas.*, COUNT(follows.id) AS fcnt").joins("LEFT OUTER JOIN follows ON follows.followable_id = ideas.id").group("ideas.id")
ideas.each do |idea|
puts idea.fcnt
# Should output a number
end
请注意,我遗漏了其他包含和where子句。首先尝试解决问题,如果此查询有效,请添加其他子句。
另外,如果您正确设置了关系,这样一个想法会有很多,那么您可以通过执行类似
的操作来清理代码ideas = Idea.includes(:collaborations).where(collaborations: { user_id: 4, owner: true })
ideas.map { |idea| idea.follows.count }