gpt4 book ai didi

ruby-on-rails - Rails 3 中 Cancan 的未定义方法角色

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:29 24 4
gpt4 key购买 nike

目前我正在为一个学校管理系统实现一个简单的演示。登录后出现以下异常:

undefined method `role' for nil:NilClass
app/models/ability.rb:5:in `initialize'
app/controllers/application_controller.rb:10:in `new'
app/controllers/application_controller.rb:10:in `current_ability'

这是ability.rb:

class Ability
include CanCan::Ability
def initialize(user)
if user.role.name=='admin'
can :manage, :all
end

if user.role.name=='teacher'
can :read, Course
end
end
end

这是application_controller.rb:

def set_current_user(user)
@current_user=user
end

def current_ability
@current_ability||= Ability.new(current_user)
end

def current_user
@current_user
end

我在 users_controller.rb 中验证用户为:

def authenticate
@user=User.find_by_name_and_password(params[:name],params[:password])

if @user
set_current_user(@user)
respond_to do |format|
format.html { redirect_to courses_path }
format.json { head :no_content }
end
end
end

最后是courses_controllers.rb中的方法索引,如你所见非常简单

class CoursesController < ApplicationController
load_and_authorize_resource
def index
@courses = Course.all

respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
end

如有任何帮助,我们将不胜感激!

最佳答案

错误告诉你“current_user”为nil,就是这样。

我假设您对用户进行身份验证,然后将他们重定向到 courses_path,这一切都很好,因为您实际上将 User 的实例分配给了 current_user。但是,在重定向之后它不知道用户并且似乎没有创建 session 。

我建议您在 authenticate 中分配 session[:user_id],因此您将能够允许 current_user 返回一个实例 session 期间的用户。

此外,您可能只使用 Devise 为您处理所有这些逻辑。

关于ruby-on-rails - Rails 3 中 Cancan 的未定义方法角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23978168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com