簡體   English   中英

CanCan用戶參數始終只將ajax請求設為nil

[英]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_filterload_and_authorize_resource before過濾器之前運行(例如對load_and_authorize_resource的調用)。 如果您的用戶在Cancan開始嘗試授權之前尚未經過身份驗證,則您的用戶將為nil。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM