我有一个方法可以将我所有的图书分类组合在一起
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 %>
这会把我带到类别控制器的show动作
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>
例如,当我点击"Computing"时,我得到
undefined method `books' for nil:NilClass
和参数被作为
传递 Parameters:{"id"=>"Computing"}
所以你需要在你的show
action
@category = Category.where(:name => params[:id]).first
# etc