Ruby on rails 未定义的局部变量或方法“user';在用户索引中[Ruby on Rails]
我不明白为什么找不到@user变量。它在我试图链接到用户的视图中抛出错误,并提到用户索引。 我做错了什么 更多信息:他们通过会话页面登录,然后我将他们重定向到“用户视图”,然后将应用程序作为登录用户使用。会话已成功创建 Routes.rbRuby on rails 未定义的局部变量或方法“user';在用户索引中[Ruby on Rails],ruby-on-rails,Ruby On Rails,我不明白为什么找不到@user变量。它在我试图链接到用户的视图中抛出错误,并提到用户索引。 我做错了什么 更多信息:他们通过会话页面登录,然后我将他们重定向到“用户视图”,然后将应用程序作为登录用户使用。会话已成功创建 Routes.rb resources :users resources :sessions 用户控制器 class UsersController < ApplicationController def new @user = User.new end
resources :users
resources :sessions
用户控制器
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.create!(user_params)
redirect_to users_path, notice: "Successfully created #{@user.name}"
end
def index
@user = User.find_by_email(params[:email])
end
private
def user_params
params.require(:user).permit!
end
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
redirect_to users_path, notice: "Logged in as #{@user.name}"
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Logged out!"
end
end
class UsersController
会话控制器
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.create!(user_params)
redirect_to users_path, notice: "Successfully created #{@user.name}"
end
def index
@user = User.find_by_email(params[:email])
end
private
def user_params
params.require(:user).permit!
end
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
redirect_to users_path, notice: "Logged in as #{@user.name}"
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Logged out!"
end
end
class sessioncontroller
用户视图
<%= link_to user.name, edit_user_path(user) %>
视图中的
用户
变量被视为未定义的局部变量。使用@user
实例变量而不是user
,因为它是在索引
操作中定义的@user
<%= link_to @user.name, edit_user_path(@user) %>
更新:
所以基本上问题出在OP的
用户
迁移中,设置了选项id:false
。这导致创建了没有id
列的users
表,并且@user.id
始终为零。从迁移中删除此选项修复了此问题 当我这样做时,它会给我一个错误[undefined method`name'],并且“name”在我的Users表中确实以字符串的形式存在。你能将你正在使用的URL发布到索引
操作吗。您需要email
参数,URL中有该参数吗?没有。创建会话时,它会重定向到用户页面。我想用户可以知道谁登录了。当有人登录时,上面会话控制器的“创建”功能会发生什么。那么我如何引用当前登录的“用户”呢?既然你在会话控制器#create
中设置了会话[:user\u id]
,你可以使用user.find(会话[:user\u id])
来获取当前登录的用户。这又带来了另一个错误,哈哈。我不明白你在问什么。错误是在UsersController索引中[找不到没有ID的用户]。当我在用户控制器中保存新用户时,自动创建ID时,为什么找不到没有ID的用户?另外,我刚刚给它传递了一个ID,以查找您在前面的评论中提到的内容。