3

我的 Rails 3 应用程序中有一个文章模型。文章模型有一个称为类别的列,它是使用新表单视图中的选择框设置的。(这是一个选择框,因为选项永远不会改变,而且只有四个)。

我拥有的索引视图代码如下:

<% @articles.category.each do |article| %>
 <%= article.category %>
 <% @articles.each do |article| %>
  <tr>
    <td><%= article.title %></td>
    <td><%= article.author %></td>
    <td><%= article.category %></td>    
    <td><%= link_to 'Show', article %></td>
    <td><%= link_to 'Destroy', article, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
 <% end %>
<% end %>

我在控制器中按类别分组:

@articles = Article.group(:category).order('title ASC')

但是,这会导致指向以下行的异常<% @articles.category.each do |article| %>

实现以下目标的最整洁(从我的视图代码中)方法是什么:

  • 第一类
  • 第1条
  • 第二条
  • 第 2 类
  • 第五条
  • 第 3 类
  • 第八条

所以每篇文章都列在它的类别下。

4

1 回答 1

8

我建议您使用 group_by 方法(文档):

# in your controller
articles = Article.order('title ASC')
@grouped_articles = articles.group_by &:category


# in your view
<% @grouped_articles.each do |category, articles| %>
  <%= category %>
  <% articles.each do |a| %>
    <tr>
      <td><%= a.title %></td>
      <td><%= a.author %></td>   
      <td><%= link_to 'Show', a %></td>
      <td><%= link_to 'Destroy', a, confirm: 'Are you sure?', method: :delete %>       </td>
    </tr>
  <% end %>
<% end %>
于 2012-07-27T15:24:14.183 回答