の値を返します [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)')
です。 ActiveRecordはマジックワンドではありませんが、SQLクエリを構築するためのツールです。さらに、ActiveRecordには独自の制限があります。したがって、アプリケーションでRDBMSを使用する場合、SQLはベースになります。
また、約counter_cache
thereを読むと役立ちます。 count(...)
のクエリを簡素化し、高速化します。
追加:
あなたは推奨回数やレビューの数ですべてPatientProfilesだけでなく、それらの を含めるためにそれを微調整する方法を?
.joins
今あなたがLEFT OUTER JOIN
を必要としながら、LEFT INNER JOIN
SQL句を生成します。
Railsの5+:
PatientProfile
.left_joins(:recommendations, :reviews)
# ...
Railsの< 5チート:
PatientProfile
.eager_load(:recommendations, :reviews)
# ...
は、あなたのモデル/関係についての詳細を提供することができますか? – archana
@archanaモデルに関する詳細情報を追加しました – user2954587
あなたの 'has_many:through'関係はどこですか? – archana