Ruby Postgresql按循环中特定列的数据对数据库表信息进行排序

时间:2016-12-30 05:29:47

标签: sql ruby-on-rails ruby postgresql

我甚至不知道如何正确地问这个,所以请原谅我,如果我的问题令人困惑。我有一个名为Colors的表 -

Sample Colors Table

我想迭代表中所有颜色的列表,但是按'color-family'排序,所以结果看起来像这样:

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 @color.name.has_a_column_that_is_also_the_@group.color-family %>
  <%= @color.name %>
  <% end %>
 <% end %>

洛尔。如你所见,我不知道从哪里开始。任何帮助将不胜感激。我没有任何sql查询经验。

再次感谢!

1 个答案:

答案 0 :(得分:1)

我不确定是否有办法只使用ActiveRecord查询方法。但它可以很容易地使用Ruby的Enumerable#group_by在内存中完成,并且性能会很好,除非它是一个大型数据集(在这种情况下你可能想要缓存结果,或者查看更复杂的SQL)查询)

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

这将返回一个哈希,其中键是颜色族(字符串),值是颜色记录的数组。