我正在使用CanCan,我遇到了一个错误,我在诊断时遇到了问题。
某些测试我的应用程序的用户收到的NoMethodError: undefined method 'where' for nil:NilClass
来自下面提到的行。
在什么情况下load_and_authorize_resource
会@jobs
作为nil
?
class JobsController < ApplicationController
load_and_authorize_resource
def index
if Job::STATES.include? params[:state]
if params[:state] == 'in_progress'
@jobs = @jobs.where(['state = ? or state = ?', params[:state], 'needs_confirmation'])
else
###################################################
# Error thrown here
@jobs = @jobs.where(['state = ?', params[:state]])
###################################################
end
end
end
end
相关的CanCan代码:
if user.role? :employee
can :read, Job do |j|
(j.employee == user) or ( j.employee == nil )
end
end
答案 0 :(得分:1)
你应该做Job.where(...)
- 你收到了这个错误,因为你确实在 nil 实例变量上调用了where
。我个人并不过分依赖load_resource
,明确没有任何伤害。