Rails has_many多个连接与记录计数

时间:2017-06-14 21:06:42

标签: ruby-on-rails activerecord

是否可以加入两个表并计算它们的关系计数?理想的输出是 [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)'的值

1 个答案:

答案 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}}