【问题标题】:Can't link to objects belonging to a category无法链接到属于某个类别的对象
【发布时间】:2025-11-29 16:20:06
【问题描述】:

我有一种方法可以将我所有的图书类别组合在一起

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"}

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 relationship rails-activerecord


    【解决方案1】:

    所以,您需要在 show 操作中

    @category = Category.where(:name => params[:id]).first
    # etc
    

    【讨论】:

    • 你在开玩笑...不敢相信我没有那样做,所以它将名称(类别名称)与书的 id 匹配