是否可以加入两个表并计算它们的关系计数?理想的输出是
[name, recommendation_count, review_count]
class PatientProfile
has_many :reviews
has_many :recommendations
# this works
PatientProfile.joins(:reviews).group(:id).pluck(:name, 'count(reviews.id)')
# this does not work
PatientProfile.joins(:recommendations, :reviews).group(:id).pluck(:name, 'count(recommendations.id)', 'count(reviews.id)')
第二个示例为两列返回'count(recommendations.id)'
的值
答案 0 :(得分:1)
这应该有效:
counter_cache
我强烈建议您开始学习SQL。 ActiveRecord不是魔术棒,而是用于构建SQL查询的工具。而且,ActiveRecord有自己的限制。因此,在应用程序中使用RDBMS时,SQL是基础。
另外,阅读count(...)
there会很有帮助。它将简化并加速任何.joins
个查询。
<强>加强>:
您如何调整它以包含所有PatientProfiles,而不仅仅是那些 推荐计数或审核计数?
LEFT INNER JOIN
生成LEFT OUTER JOIN
SQL子句,现在需要PatientProfile
.left_joins(:recommendations, :reviews)
# ...
Rails 5 +:
PatientProfile
.eager_load(:recommendations, :reviews)
# ...
Rails&lt; 5作弊:
{{1}}