2017-04-03 11 views
0

アプリケーションが自分のuser_idに基づいてユーザーのtodoリストのみを表示するtodolistアプリケーションを開発中です。つまり、ユーザーがログインした場合、データベースは同じuser_idを持つtodoリストのみを表示します。定義されていないメソッド `todo_lists 'for nil:NilClass

が、イムこのエラーを取得:

undefined method `todo_lists' for nil:NilClass 

    # GET /todo_lists/new 
def new 
@todo_list = current_user.todo_lists.build 
end 
    # GET /todo_lists/1/edit 

todo_lists_controller.rb

class TodoListsController < ApplicationController 
before_action :set_todo_list, only: [:show, :edit, :update, :destroy] 

def index 
@todo_lists = TodoList.all 
end 

def new 
@todo_list = current_user.todo_lists.build 
end 

def create 
@todo_list = current_user.todo_lists.build(todo_list_params) 

respond_to do |format| 
    if @todo_list.save 
    format.html { redirect_to @todo_list, notice: 'Todo list was 
successfully created.' } 
    format.json { render :show, status: :created, location: @todo_list } 
    else 
    format.html { render :new } 
    format.json { render json: @todo_list.errors, status: :unprocessable_entity } 
    end 
end 
end 

private 
def set_todo_list 
    @todo_list = TodoList.find(params[:id]) 
end 

def todo_list_params 
    params.require(:todo_list).permit(:title, :description) 
end 
end 

は破壊、更新、ショーや編集のような他の方法を得たが、私はそれが何を持っていないと思うcuzを私はここに貼り付けていけませんこの問題と関係があります。 todo_lists@todo_lists,TodoListstodo_listなどのように変更しようとしましたが、いずれも機能しません。

私はさまざまなサイトでソリューションを検索しますが、私は見つけられません。私は実際にはここでの主な問題は、私は上記のように同じ意味(Sと他のもの)と同じ意味で別のコードを持っているcuzを書くためにどのようなコードを理解していないということです。ちょっと愚かしかし、ええ、まだトラインここ

P/S学習レールの2ヶ月^^ SRY私の壊れた英語

+0

を同様のコードを追加し、あなたがcurrent_user' 'のメソッド定義何貼り付けることができますか?基本的に 'current_user'をデバッグする必要があります – AnkitG

+0

@AnkitG' def current_user'を意味しますか?コントローラーで? – Nami

+0

はい、しかし、あなたは 'current_user'を定義しました。あなたの 'current_user'は' nil'です。 – AnkitG

答えて

0

問題のためにcurrent_userがnilであるということです。

deviseを使用している場合は、TodoListsControllerbefore_action :authenticate_user!を追加してください。

ない場合は、お使いのapplication_helper.rbに

def current_user 
    User.first 
end 
+0

私はdeviseを使って 'before_action:authenticate_user! 'を追加しました。これは、ユーザを認証するだけでtodolistを作成できることを意味します、そうですか? – Nami

+0

はい、ユーザーがログインしていない場合、ログインページにリダイレクトされます。 –

+0

それは動作します!ありがとう! – Nami

関連する問題