Ruby on rails 未定义的局部变量或方法“user';在用户索引中[Ruby on Rails]

Ruby 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

我不明白为什么找不到@user变量。它在我试图链接到用户的视图中抛出错误,并提到用户索引。 我做错了什么

更多信息:他们通过会话页面登录,然后我将他们重定向到“用户视图”,然后将应用程序作为登录用户使用。会话已成功创建

Routes.rb

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,以查找您在前面的评论中提到的内容。