0

すべての本のカテゴリをグループ化する方法があります

def self.categories_list
joins(:books).
select('categories.id, categories.name, count(*) AS books_count').
group('categories.id, categories.name').
order('books_count DESC')
end

その後、そのようにビューに出力できます

@bookcategories = Category.categories_list

次に、ビューの[コンピューティング]をクリックして、「コンピューティング」に属するすべての書籍にリンクします。

<% @bookcategories.each do |b| %>
  <li><%= link_to b.name, category_path(b.name) %></li>
<% end %>

これにより、カテゴリコントローラーのショーアクションが表示されます。

  def show
  @category = Category.where(:name => params[:name]).first
  @categorisedbooks = @category.books #get me all books that have the category name
  end

とショーアクションのビュー

  <div class="container">
   <div class="row ">
    <div class="span12">     
     <% @categorisedbooks.each do |c| %>
      <%= image_tag c.avatar.url(:medium), :class=> "allBooksCover" %>
     <% end %>
   </div>
  </div>
 </div>

たとえば、[コンピューティング]をクリックすると、次のようになります。

 undefined method `books' for nil:NilClass

そしてパラメータはとして渡されています

  Parameters:{"id"=>"Computing"}
4

1 に答える 1

1

だから、あなたはあなたのshow行動に必要です

@category = Category.where(:name => params[:id]).first
# etc
于 2013-01-15T15:53:08.977 に答える