申し訳ありませんが、Accounts
には多くのSchedules
があり、多くはImpressions
です。Activerecord:特定の列と関連付けの関連カウントを集めます
私はAccounts.name
、Accounts.schedules
のすべてを取得したいが、唯一のAccounts.schedules.date
、Accounts.schedules.summary
を摘採し、またAccounts.schedules.impressions
の数がここ1つのアカウント(私はすべてのアカウントをお勧めします)
与えられた私が何をしたいの可視化ですAccount:
.name
Schedules
.date
.summary
count(Schedule.impressions)
そしてここでは、コードがあまりにも多くのクエリを次のようになります
Account.find_each do |account|
puts a.name # Account.name
a.schedules.each do |schedule|
puts schedule.date # Account.schedule.date
puts schedule.summary # Account.schedule.summary
puts schedule.impressions.count # Count(Account.schedule.impressions)
できるだけ少ないクエリでこれをやりたいと思っています。私は効率と最適化が大好きです。
恐ろしく!これは本当にうまくいく! –
accounts.nameでグループ化できる方法はありますか?だから私はそれらをループすると、同じ名前のスケジュールはすべて1つの配列にありますか? –
@ Phatso727あなたは、 '{account1 => [ActiveRecord :: Relation]、account2 => [ActiveRecord:]のようにオブジェクトを' Hash'に変換するメソッドの最後に 'group_by(:account_name) :Relation]} 'あるいは' eager_load'メソッドを使うことができます。 – engineersmnky