如何使用ActiveRecord获取相关数据?
我想要返回两列,PatientProfile.name
和PatientProfile.recommendations.length
我使用此answer
尝试了以下内容class PatientProfile
has_many :recommendations
PatientProfile.joins(:recommendations).select("patient_profiles.name as name, count(recommendation.id) as rec_count")
答案 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