我尝试创建一个简单的Rails博客时尝试创建和显示错误时遇到各种错误,请让我知道您是否看到明显的东西,或者是否需要我在尝试一些数字后发布更多代码的事情,但无济于事。谢谢
浏览器给我这个错误
没有ID的用户无法找到
在我的“ logged_in?”中 显示的方法
def logged_in?
@current_user ||= User.find(session[:user_id])
end
会话控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
flash[:success] = "You are logged in"
redirect_to root_path
else
render action: 'new'
flash[:error] = "There was a problem logging in. Please check your email and password"
end
end
end
def index
@users = User.all
end
def show
end
def new
@user = User.new
end
def edit
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
flash[:notice] = "You have registered, please login"
redirect_to login_path
else
render :new
end
end
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url }
format.json { head :no_content }
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end
end
物品管制员
class ArticlesController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]
def new
@article = Article.new
end
def index
@article = Article.all
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end
def show
@article = Article.find(params[:id])
end
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
private
def article_params
params.require(:article).permit(:title, :text, :image)
end
end
应用程序助手
module ApplicationHelper
def logged_in?
@current_user ||= User.find(session[:user_id])
end
end
您面临的问题session[:user_id]
是nil
。通常,设置当前用户的方法称为current_user
。该logged_in?
不是一种方法设置的用户实例一个好名字,因为人们会认为一个问号结尾的方法将返回一个true
或false
。而不是用户实例。
另外,设置当前用户通常使用来完成before_filter
。另外,您要在设置当前用户(即current_user尚不存在)的操作进行过滤之前跳过此类操作
最后,如果找不到用户,我宁愿优雅地失败。您可以通过将代码更改为User.find_by_id(session[:user_id])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句