2013-03-04 115 views
0

我在我的Rails應用程序使用慘慘+設計僅Ajax請求:慘慘用戶參數總是零

當我嘗試更新評論記錄的問題發生,我想初始化方法的用戶參數總是要來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 慚慚1.6.9 紅寶石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請求罰款摘錄..

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 
+1

請考慮將您的代碼張貼爲文本。如果有人想嘗試它,將它作爲圖像發佈並不是很有用。 – Jesper 2013-03-04 20:21:14

+0

嗨Jesper,完成:) – 2013-03-04 20:25:55

回答

5

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

您可以使用user.role.try(:name)或確保role方法始終返回響應name的對象。

編輯

慚慚使用控制器上的current_user方法。如果該方法返回nil,那麼用戶將在您的Ability文件中爲零。

確保Devise before_filter在Cancan之前的過濾器之前運行(如調用load_and_authorize_resource)。如果您的用戶在Cancan開始嘗試授權之前未通過身份驗證,則您的用戶將爲零。

+0

此行之前'user || = User.new#guest用戶'變量用戶是零,在它剛剛新的用戶實例..因爲我記錄,用戶必須是我的記錄是不是? – 2013-03-04 20:36:26

+0

沒有。 NilClass的未定義方法名稱,表示用戶爲零 – 2013-03-04 20:36:50

+0

它是第10行...名稱方法正在角色上調用,而不是用戶。 – 2013-03-04 20:37:34