2

私は次のモデルを持っています:

# == Schema Information
#
# Table name: quotes
#
#  id                      :integer          not null, primary key
#  bound_rate_id           :integer
class Quote < ActiveRecord::Base
  #snip
end

# == Schema Information
#
# Table name: rates
#
#  id                             :integer          not null, primary key
#  quoted_premium                 :integer
class Rate < ActiveRecord::Base
  #snip
end

このループと同じことを計算するクエリを作成したい:

sum = 0
for quote in Quote.all
  rate = Rate.find(quote.bound_rate_id)
  sum += rate.quoted_premium
end

ActiveRecord のクエリ インターフェイスを使用してこれを行うにはどうすればよいですか? (Rails 4 を使用しています。)


編集:ActiveRecord以前のクエリからのインスタンスが既にQuoteあるため、クエリをテーブルから開始してquotesテーブルに結合することをお勧めしratesます。その逆ではありません。このような:

some_quotes = Quote.where(:some_other_property, my_param);
sum_of_rates = some_quotes.?????
4

1 に答える 1

3

これを試してみてください

sum = Rate.where(:id => Quote.pluck(:bound_rate_id).compact).sum(:quoted_premium)

リレーションを追加したら、これを試してください

 sum = Quote.joins(:rate).sum('rates.quoted_premium') # it will get sum of all query's   quoted_premium

特定の add where 句の合計を取得するには

 sum = Quote.joins(:rate).where(:bound_rate_id => [list of Rate ids]).sum('rates.quoted_premium')

エラーが発生した場合は、Mysql2::Error: Unknown column 'rates.bound_rate_id' in 'on clause'ActiveRecord がどのように結合するかを指定します

sum = Quote.joins('INNER JOIN rates ON quotes.bound_rate_id = rates.id').sum('rates.quoted_premium')
于 2013-07-28T19:00:16.517 に答える