2

Rails 3.2 アプリには、多くの Awards を持つ User モデルがあります。

Award クラスには、:type、:level、:image 属性があります。

ユーザーのショーページにアワードを表示したいのですが、いくつかの基準があります。User.awards は、タイプとレベルの両方でグループ化する必要があり、タイプとレベルの組み合わせごとに、その画像と賞の数を表示したいと考えています。

これを達成するためのクエリとビューを作成するのに苦労しています(そしてこれを明確に説明するのに)。

子レコードの 2 つの属性をグループ化し、それらの子のカウントと属性 (画像) の両方を表示するにはどうすればよいですか?

4

2 に答える 2

1

アクティブなレコード オブジェクト、配列、およびグループ化された配列が複雑に混在しているため、これを理解するのに少し時間がかかりました。

とにかく、これが他の人に役立つ場合

User に多くの Awards があり、 Award には属性:type:level、があるとし:imageます。

for award in @user.awards.group_by{ |award| [award.type,award.level] }.sort_by{|award| [award[0][0], award[0][1]]}
  puts "#{(award[0][0]).capitalize} - Level #{award[0][1]}"  # e.g. Award_Name - Level 1
  puts award[1].first.image #outputs the value of award.image, i.e. the image url 
  puts award[1].count  #counts the number of grouped awards
end

ちょっと面倒!このコードを最適化する方法はありますか?

于 2013-06-10T11:57:10.837 に答える
0

GROUP BY使用しているデータベースによっては、 on タイプとレベルを使用してカスタム SQL クエリを作成する必要があります。

SELECT * FROM users GROUP BY users.type, users.level

(Postgres には特別な解釈があるGROUP BYため、使用しているデータベースのドキュメントを確認してください)。

Rails で記述するには、次のドキュメントを参照してください: http://guides.rubyonrails.org/active_record_querying.html#group

カウントについては、2 番目のステップで実行する必要があります (Ruby はsize、クエリが返す ActiveRecord オブジェクトの配列のメソッドを使用して実行できます)。

于 2013-06-09T16:52:41.180 に答える