Cloths #index中的NoMethodError

时间:2016-04-18 07:10:16

标签: ruby-on-rails ruby ruby-on-rails-4 for-loop

我无法解决这个问题。我一直得到同样的错误:

  

(nil的未定义方法`id':NilClass):

这是我的application.html

<% @categories.each do |category| %> 
<li><a><%= link_to 'category.title', category_cloth_path(@category)%></a></li>
<%end%>

cloths_controller.rb

def index
@cloths = Cloth.all
@categories = Category.all 
end

def show
@cloths = Cloth.all
@categories = Category.where("category_id = ?", @category.id)
@comments = Comment.where("cloth_id = ?", @cloth.id)
@comments = Comment.paginate(:page => params[:page], :per_page => 3)
end

5 个答案:

答案 0 :(得分:2)

尝试将@category更改为category

<% @categories.each do |category| %> 
  <li><%= link_to category.title, category_cloth_path(category)%></li>
<%end%>

注意: link_to会创建<a></a>,因此您无需将<%= link_to %>括在<a></a>

答案 1 :(得分:0)

您正在循环内为每个类别创建链接,因此您必须在链接标记内传递类别。

这可能对你有帮助......

<% @categories.each do |category| %> 
<li><a><%= link_to 'category.title', category_cloth_path(category)%></a></li>
<%end%>

答案 2 :(得分:0)

使用

更新代码
<% @categories.each do |category| %> 
<li><a><%= link_to 'category.title', category_cloth_path(category)%></a></li>
<%end%>

def show
@cloths = Cloth.all
@categories = Category.find(params[:id])
@comments = Comment.where("cloth_id = ?", @cloth.id)
@comments = Comment.paginate(:page => params[:page], :per_page => 3)
end

答案 3 :(得分:0)

您正在使用锚标记(<a>)以及(link_to)您将在链接中获得链接,请删除外部<a>标记。

答案 4 :(得分:0)

您的Routes.erb一定有问题 如果问题(nil的未定义方法`id':NilClass):存在意味着你的category_cloth_path(@category)没有在路由中定义... 尝试输入routes.erb

Rails.application.routes.draw do    
resources :cloth
     member do
      get 'category'
     end
    end
end