0

RailsアプリでCancan+Deviseを使用しています:

nilコメントレコードを更新しようとすると問題が発生します。ログに記録されていても、initializeメソッドのユーザーパラメータが常に表示されると思います。

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 より良いエラー

最後に、このエラーが発生します。

ここに画像の説明を入力してください

誰もがこの問題に直面していますか?誰かが私を助けることができますか?

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 / routers.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を返す場合、ユーザーはAbilityファイルでnilになります。

フィルターの前にCancanの前にDevisebefore_filterが実行されていることを確認してください(の呼び出しなどload_and_authorize_resource)。Cancanが認証を開始する前にユーザーが認証されていない場合、ユーザーはnilになります。

于 2013-03-04T20:33:03.953 に答える