2017-04-03 7 views
0

Im Entwicklungsprozess einer Todolist App, die die App nur die Todo Liste eines Benutzers basierend auf ihrer user_id zeigt. Das heißt, wenn sich ein Benutzer anmeldet, zeigt die Datenbank nur die Todo-Liste mit der gleichen user_id an.undefined Methode `todo_lists 'für nil: NilClass

aber im immer diese Fehlermeldung:

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 

bekam andere Verfahren wie zerstören, zu aktualisieren, zu zeigen und zu bearbeiten, aber ich dont fügen Sie hier Weil ich denke, es hat nichts mit diesem Problem zu tun haben. Ich habe versucht, die todo_lists zu anderen, wie @todo_lists, TodoLists und todo_list zu ändern, aber keiner von ihnen funktioniert.

Ich suche nach der Lösung in verschiedenen Seiten, aber ich finde keine. Ich denke wirklich, dass das Hauptproblem hier ist, dass ich nicht verstehe, welcher Code zu schreiben ist, weil ich unterschiedlichen Code mit der gleichen Bedeutung wie ich oben genannt habe (@todo_lists und andere). Kinda dumm, aber ja, noch tryin' hier

P/S 2 Monate Lernschienen ^^ sry für mein gebrochenes Englisch

+0

Können Sie fügen Sie ihn, was ist die Methode Definition von 'current_user'? Im Grunde müssen Sie 'current_user' debuggen – AnkitG

+0

@AnkitG Sie meinen' def current_user'? in der Steuerung? – Nami

+0

Ja, jedoch haben Sie 'current_user' definiert. Ihr 'current_user' ist' nil'. – AnkitG

Antwort

0

Das Problem ist, dass current_user Null ist. Wenn Sie devise verwenden, fügen Sie before_action :authenticate_user! in Ihrem TodoListsController hinzu.

Wenn nicht, dann fügen Sie einen ähnlichen Code zu Ihrem application_helper.rb

def current_user 
    User.first 
end 
+0

ich benutze devise und fügte die 'before_action: authenticate_user!' .. es bedeutet, dass nur authentifizieren Benutzer einen Todolist erstellen kann, oder? – Nami

+0

Ja, wenn sich der Benutzer nicht anmeldet, wird er zur Anmeldeseite umgeleitet. –

+0

Es funktioniert! Vielen Dank ! – Nami

Verwandte Themen