2016-12-30 8 views
0

これを正しく質問する方法がわからないので、私の質問が混乱している場合は私を許してください。Ruby Postgresqlループ内の特定の列のデータでデータベーステーブル情報をソート

Sample Colors Table

結果はこのようになりますので、私はテーブル内のすべての色のリストを反復するために好きですが、「色ファミリー」によって事前ソートう - 私はテーブルと呼ばれる色を持っています

しかし、私はその種の情報を収集してソートするためのSQL構文は知らない。笑

<% @group = Colors.presort_by("color-family") %> 
<% @color = Colors.all %> 
<% @group.each do |group| %> 
    <%= group.color-family %>s - <br> 
    <% if @[email protected] %> 
    <%= @color.name %> 
    <% end %> 
<% end %> 

);
驚くべきことに、このコードは動作しませんでした。ご覧のとおり、どこから始めたらいいのか分かりません。どんな助けでも大歓迎です。私はSQLクエリの経験が全くありません。

もう一度おねがいします!

+0

'@colors = Color.order(:color-family、:name)'このようなことは、あなたが望む順番によって異なります。あなたは[ここ](http://guides.rubyonrails.org/active_record_querying.html#ordering)を参照することができます – bananaappletw

答えて

1

ActiveRecordのクエリメソッドを使用してこれを行う方法があるかどうかはわかりません。しかし、RubyのEnumerable#group_byを使ってメモリ内で簡単に行うことができ、大きなデータセットでないとパフォーマンスは良いでしょう(その場合は、結果をキャッシュしたり、より複雑なSQLクエリを調べたいかもしれません)

@colors = Color.all 
grouped = @colors.group_by { |color| color.color_family } 
# or    .group_by &:color_family 

これは、キーがカラーファミリ(文字列)で、値がカラーレコードの配列であるハッシュを返します。

関連する問題