CanCan用户参数始终只有ajax请求

时间:2013-03-04 20:20:02

标签: ruby-on-rails ruby cancan

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

当我尝试更新评论记录时会出现问题,我想初始化方法的用户参数总是来nil即使我已经记录了:

Ability.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 Better Errors

最后它引发了这个错误。

enter image description here

每个人都面临这个问题? 有人可以帮帮我吗?

Rails 3.2.8 设计2.1.0 CanCan 1.6.9 Ruby 1.9.3p385

修改1

CommentsController.rb

 class CommentsController < ApplicationController

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

   layout "admin"

修改2

嘿伙计们,当控制器收到ajax请求时,CanCan可以很好地摘录..

Comments.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"
 });

配置/ routes.rb中

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

1 个答案:

答案 0 :(得分:5)

user不是user.role,而是user.role.try(:name)

您可以使用role或确保name方法始终返回响应current_user的对象。

修改

Cancan在控制器上使用before_filter方法。如果该方法返回nil,则用户将在您的Ability文件中为nil。

确保在过滤之前在您的Cancan之前运行设计load_and_authorize_resource(例如调用{{1}})。如果您的用户在Cancan开始尝试授权之前未经过身份验证,则您的用户将为零。