Ich habe eine einfache Anwendung erstellt, die mit DB interagiert und CRUD-Operationen darin ausführt, nachdem ein Benutzer authentifiziert und autorisiert wurde. Früher funktionierte es, als es eine einzige Tabelle gab, aber sobald ich mit verschachtelten Relationen und Authentifizierungsmechanismen zu spielen begann, bekam ich den Fehler. Bis jetzt glaube ich, dass ich alles richtig gemacht habe. Hier ist der Screenshot des Fehlers:Ruby on Rails gibt Fehler aus, wenn Weiterleitungen zu root_path oder login_path sind
Hier ist mein routes.rb:
Rails.application.routes.draw do
root to: "todo_lists#index"
resources :todo_lists do
resources :todo_items
end
resources :sessions, only: [:new, :create, :destroy]
get "/login" => "sessions#new", as: "login"
delete "/logout" => "sessions#destroy", as: "logout"
end
Meine Sitzungssteuerung:
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by(username: params[:username])
@password = params[:password]
end
if @user && @user.authenticate(password)
session[:user_id] = @user.id
redirect_to root_path, notice: "Logged in successfully"
else
redirect_to login_path, alert: "Invalid Username/Password combination"
end
def destroy
reset_session
redirect_to login_path, notice: "You have been logged out"
end
end
Oh, und ich änderte die Application so die Routen sollten Arbeit dennoch:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :ensure_login
helper_method :logged_in?, :current_user
protected
def ensure_login
redirect_to login_path unless session[:user_id]
end
def logged_in?
session[:user_id]
end
def current_user
@current_user ||= User.find(session[:user_id])
end
end
Danke, Das war so dumm von mir. –