2017-03-05 6 views
-1

私はtodos#indexにNoMethodErrorを取得していますが、その理由を理解できません。Ruby on Rails:NoMethodError in todos#index

<h1>Listing all Todos</h1> 

<p> 

    <%= link_to "Create a Todo", new_todo_path %> 
</p> 

<table> 
    <tr> 
    <th>Name</th> 
    <th>Description</th> 
    </tr> 
    <% @todos.each do |todo| %> 
    <tr> 
     <td><%= todo.name %></td> 
     <td><%= todo.description %></td> 
     <td><%= link_to 'Edit', edit_todo_path(todo) %></td> 
     <td><%= link_to 'Show', todo_path(todo) %></td> 
     <td><%= link_to 'Delete', todo_path(todo), method: :delete, data: {confirm: "Are you sure?"} %></td> 
    </tr> 
    <% end %> 
</table> 

todos_controller.rb:あなたは間違った場所にendを持っていたよう

class TodosController < ApplicationController 
    before_action :set_todo, only: [:edit, :update, :show, :destroy] 

    def new 
    @todo = Todo.new 
    end 

    def create 
    @todo = Todo.new(todo_params) 
    if @todo.save 
     flash[:notice] = "Todo was created successfully" 
     redirect_to todo_path(@todo) 
    else 
     render 'new' 
    end 
    end 

    def show 
    end 

    def edit 
    end 

    def update 
    if @todo.update(todo_params) 
     flash[:notice] = "Todo was successfully updated" 
     redirect_to todo_path(@todo) 
    else 
     render 'edit' 
    end 
    end 
end 

    def index 
     @todos = Todo.all 
    end 

    def destroy 
     @todo.destroy 
     flash[:notice] = "Todo was deleted successfully" 
     redirect_to todos_path 
    end 

    private 

    def set_todo 
     @todo = Todo.find(params[:id]) 
    end 

    def todo_params 
     params.require(:todo).permit(:name, :description) 
    end 
+2

あなたは 'todos'コントローラを投稿できますか? – Mark

+0

こんにちは、私はちょうどtodos_controller.rbコードを掲示しました。 – pdenlinger

+0

すごく、ありがとう!私はあなたの質問に答えました。 – Mark

答えて

2

に見えますここに私index.html.erbファイル内のコードです。私はあなたのコントローラを修正しました。あなたはあなたのindexアクションを定義する前にあなたのclass TodosControllerを途中で終了していました。

class TodosController < ApplicationController 
    before_action :set_todo, only: [:edit, :update, :show, :destroy] 

    def new 
    @todo = Todo.new 
    end 

    def create 
    @todo = Todo.new(todo_params) 
    if @todo.save 
     flash[:notice] = "Todo was created successfully" 
     redirect_to todo_path(@todo) 
    else 
     render 'new' 
    end 
    end 

    def show 
    end 

    def edit 
    end 

    def update 
    if @todo.update(todo_params) 
     flash[:notice] = "Todo was successfully updated" 
     redirect_to todo_path(@todo) 
    else 
     render 'edit' 
    end 
    end 

    def index 
    @todos = Todo.all 
    end 

    def destroy 
    @todo.destroy 
    flash[:notice] = "Todo was deleted successfully" 
    redirect_to todos_path 
    end 

    private 

    def set_todo 
    @todo = Todo.find(params[:id]) 
    end 

    def todo_params 
    params.require(:todo).permit(:name, :description) 
    end 
end  
+0

それはうまくいきました。どうもありがとうございました! – pdenlinger

関連する問題