通过计数,轨道可以拔掉has_many

时间:2017-06-14 14:44:57

标签: ruby-on-rails activerecord

如何使用ActiveRecord获取相关数据?

我想要返回两列,PatientProfile.namePatientProfile.recommendations.length

我使用此answer

尝试了以下内容
class PatientProfile
  has_many :recommendations

PatientProfile.joins(:recommendations).select("patient_profiles.name as name, count(recommendation.id) as rec_count")

2 个答案:

答案 0 :(得分:1)

您从answer丢失了.group 如果您需要pluck(即数组预期作为输出),请尝试此操作:

PatientProfile
  .joins(:recommendations)
  .group(:id)
  .pluck(:name, 'count(recommendations.id)')

id分组以避免针对不同name的非uniq PatientProfile。根据您的应用逻辑,您可以将其更改为.group(:name)
输出是2d数组:

=> [['aa', 4],
['bb', 2],
['cc', 1]]

如果您需要关系作为输出,请尝试:

PatientProfile
  .joins(:recommendations)
  .group(:id)
  .select(:id, :name, 'count(recommendations.id) as rec_count')

答案 1 :(得分:0)

我觉得这应该有效:

res = ActiveRecord::Base.connection.execute("
  SELECT patient_profiles.name, count(patient_profile_id) AS rec_count 
  FROM patient_profiles INNER JOIN recommendations ON 
  recommendations.patient_profile_id = patient_profiles.id GROUP BY 
  patient_profile_id
")

res.to_a