【问题标题】:Grouping records with headings in Rails 3在 Rails 3 中使用标题对记录进行分组
【发布时间】:2012-07-27 10:35:07
【问题描述】:

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

我的索引视图代码如下:

<% @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')

但是,这会导致指向以下行 &lt;% @articles.category.each do |article| %&gt; 的异常。

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

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

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

【问题讨论】:

    标签: ruby-on-rails-3 model group-by


    【解决方案1】:

    我建议你使用 group_by 方法 (Documentation):

    # 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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多