Rails 3.0.3アプリケーション(Dreamhostの共有サーバーで動作しません)。Rails:1つのモデルから多数のデータサブセットを扱うには?
1つのモデルのデータのサブセットから計算された平均を表示するページがあります。
今、それぞれの平均値を個別に算出され、このような:
ビューから、私はそうのようなユーザモデルに配置されている平均的なメソッドを呼び出すために考案認証によって提供さcurrent_user
ヘルパーを使用しています:
<%= current_user.seven_day_weight_average %>
<%= current_user.fourteen_day_weight_average %>
<%= current_user.thirty_day_weight_average %>
ここでは、ユーザモデルのパブリックメソッドと平均化法です:
def seven_day_weight_average
calculate_average_weight(7)
end
def fourteen_day_weight_average
calculate_average_weight(14)
end
def thirty_day_weight_average
calculate_average_weight(30)
end
. . .
private
def calculate_average_weight(number_days)
temp_weight = 0
weights_array = self.weights.find_all_by_entry_date(number_days.days.ago..Date.today)
unless weights_array.count.zero?
weights_array.each do |weight|
temp_weight += weight.converted_weight
end
return (temp_weight/weights_array.count).round(1).to_s
else
return '0.0'
end
end
これは非常にefficieいないようですnt - 計算された平均値ごとにデータベースが照会されます。
これらの平均値を1つのデータベースクエリでページで使用できるようにするにはどうすればよいですか?
お返事ありがとうございます。 @converted_weightsで何をすべきか分かりません。私はそれがconverted_weight値を含んでいるのを見ることができますが、それは呼び出しているXXX_day_weight_average呼び出しにnilを返しています。私のRubyの知識は非常に限定されています - '@converted_weights [-number_days ..- 1] .sum'は平均を返しますか? – jacoulter
@jacoulter上記を参照してください - 私はコードを簡略化して修正し、いくつかの説明を追加しました。 – Zubin
これを説明する時間をとってくれてありがとう。私はそれを動作させましたが、メソッドが呼び出されるたびにデータベースにヒットしています(これは期待されています)。必要な範囲を呼び出して呼び出し元のWebページで使用できるインスタンス変数をロードする方法はありますか? – jacoulter