CanCan资源加载问题

时间:2011-10-07 07:54:52

标签: ruby-on-rails ruby-on-rails-3 cancan

我正在使用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

1 个答案:

答案 0 :(得分:1)

你应该做Job.where(...) - 你收到了这个错误,因为你确实在 nil 实例变量上调用了where。我个人并不过分依赖load_resource,明确没有任何伤害。