2016-12-30 25 views
0

我甚至不知道如何正確提問,所以如果我的問題很混亂,請原諒我。我有一個表叫做顏色 -Ruby Postgresql按循環中特定列的數據對數據庫表信息排序

Sample Colors Table

我想遍歷表中的所有顏色的列表,但「顏色系列」預先排序,以便其結果將是這個樣子:

Colors: 
    Reds - 
     Maroon 
     Stop Sign 
    Yellows - 
     Canary 
    Blues - 
     Sky Blue 
     Royal Blue 
    Greens - 
     Neon Green 

但我不知道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 

這將返回一個散列,其中鍵是顏色族(字符串),值是彩色記錄的數組。