0

我在我的 rails 应用程序中使用 Cancan + Devise:

当我尝试更新评论记录时会出现问题,我猜nil即使我已登录,initialize 方法的用户参数也总是会出现:

能力.rb

class Ability
  include CanCan::Ability


  def initialize(user)
    user ||= User.new # guest user

    unless user.nil?
      if user.role.name == "admin"
        can :manage, :all
      elsif user.role.name == "atendimento"
        can :manage, Comment
      end
    end
  end
end

Better_errors 更好的错误

最后它引发了这个错误。

在此处输入图像描述

每个人都面临这个问题?任何人都可以帮助我吗?

Rails 3.2.8 设计 2.1.0 CanCan 1.6.9 Ruby 1.9.3p385

编辑 1

评论控制器.rb

 class CommentsController < ApplicationController

   authorize_resource :only => [:index, :show,:new,:edit, :create,:update,:destroy,  :approve, :moderate, :disapprove]

   layout "admin"

编辑 2

嘿伙计们,当控制器收到 ajax 请求时,CanCan 可以正常工作。

评论.js

 var request = $.ajax({
   url: url_to_request,
   type: "PUT",
   data: {id : id_to_send, answer : answer_to_send, question : question_to_send },
   dataType: "json"
 });

配置/路由.rb

  resources :comments do
    member do
      put 'approve'
      put 'moderate'
      put 'disapprove'
    end
  end
4

1 回答 1

5

不是user那是零,它是user.role

您可以使用user.role.try(:name)或确保该role方法始终返回响应name.

编辑

Cancan 使用current_user控制器上的方法。如果该方法返回 nil,那么您的能力文件中的 user 将为 nil。

确保设计before_filter在过滤器之前运行在您的 Cancan 之前(例如调用load_and_authorize_resource)。如果您的用户在 Cancan 开始尝试授权之前尚未进行身份验证,则您的用户将为 nil。

于 2013-03-04T20:33:03.953 回答