3

Rails 3 アプリケーションに記事モデルがあります。記事モデルには、新しいフォーム ビューの選択ボックスを使用して設定されるカテゴリと呼ばれる列があります。(オプションは決して変更されるべきではなく、4 つしかないため、これは選択ボックスです)。

私が持っているインデックスビューのコードは次のとおりです。

<% @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
  • 第1条
  • 第2条
  • カテゴリー2
  • 第5条
  • カテゴリー3
  • 第8条

したがって、各記事はそのカテゴリの下にリストされます。

4

1 に答える 1

8

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 %>
于 2012-07-27T15:24:14.183 に答える