[英]CanCan user parameter always nil only ajax request
我在Rails應用程序中使用Cancan + Devise:
當我嘗試更新評論記錄時,問題發生了,即使我已記錄,我猜初始化方法的用戶參數也總是nil
。
能力
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
更好的錯誤
最終它引發了這個錯誤。
每個人都面臨這個問題嗎? 有人可以幫助我嗎?
Rails 3.2.8 Devise 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"
});
config / routes.rb
resources :comments do
member do
put 'approve'
put 'moderate'
put 'disapprove'
end
end
不是user
為nil,而是user.role
。
您可以使用user.role.try(:name)
或確保role
方法始終返回響應name
的對象。
編輯
Cancan在控制器上使用current_user
方法。 如果該方法返回nil,則用戶在您的Ability文件中將為nil。
確保Devise before_filter
在load_and_authorize_resource
before過濾器之前運行(例如對load_and_authorize_resource
的調用)。 如果您的用戶在Cancan開始嘗試授權之前尚未經過身份驗證,則您的用戶將為nil。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.