2016-04-18 7 views
2

Ich habe Probleme, dieses Problem zu lösen. Ich erhalte immer den gleichen Fehler:NoMethodError in Cloths # Index

(undefined method `id' for nil:NilClass):

Hier mein 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 
+0

Können Sie klären, welche Zeile den Fehler gibt? –

+0

  • <% = link_to 'category.title', kategorie_cloth_path (@category)%>
  • diese Zeile. Es definiert nicht die Kategorie ID. –

    Antwort

    0

    Es muss ein Problem mit Ihrem Routes.erb sein, wenn das Problem (nicht definierte Methode `id‘ für nil: NilClass): dass Ihren category_cloth_path existiert bedeutet (@Category) in Strecken, die nicht definiert ... versuchen setzen in routes.erb

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

    Sie sind für jede Kategorie Links in Schleife zu schaffen, so müssen Sie haben Kategorie innerhalb Link-Tag übergeben.

    Diese dir helfen könnten ...

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

    Versuchen Sie, @category zu category:

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

    Hinweis:link_to schafft <a></a>, so dass Sie einschließen müssen

    nicht <%= link_to %> innerhalb <a></a>
    0

    Nach oben datieren Sie den Code mit

    <% @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 
    
    0

    Sie verwenden Anker-Tag (<a>) und auch (link_to) Sie einen Link innerhalb Link erhalten, bitte die äußere <a> Tag entfernen.