

DashboardController内で、Userの一覧などを表示させるようなケースにおいて、  
uninitialized constant Dashboard  
というエラーが表示されます。

ControllerとAbillityの対象とがちがっていてもcancancanを機能させたいのですが、  
どのようにすればいいのかがわからず難航しております。

[code]

    
    class DashboardController
      load_and_authorize_resource (1)
      #skip_load_and_authorize_resource (2)
      #load_and_authorize_resource :user, :parent => false (3)
    
      @users = current_user (4)
    
    end
    
    
[/code]

(1) これだと次のエラーが表示されます。  
uninitialized constant Dashboard

(2) これだと、エラーはなくなるものの、権限管理ができてないので、目的にそえておりません。

(3) 調べているとこういうやり方でいけると書いてあったのですが、私の環境下では上手く行きませんでした。  
<https://github.com/CanCanCommunity/cancancan/wiki/Authorizing-controller-
actions#custom-class>

(4) Adminの場合はUser.allでほしく、それ以外の場合はcurrent_userを取得したい。

こちらのやり方は、権限チェックを自作なさっておりますが、  
このやり方だと、(4)の部分が上手くいかず、こちらのやり方でも難航しております。  
<http://qiita.com/snaka/items/2f30e6abedf7f7a33e99>

よろしくお願いします。


CC BY-SA 3.0
2016-06-01T13:32:08.220
25361
2021-03-18T15:04:55.433
13175
question
ruby-on-rails ruby
cancancanのgemでDashboardControllerのようなControllerとAbillityの対象が違うケースにおいて機能せず、uninitialized constant Dashboardとなります。


(3)の回答が役に立つと思います。今回は参照されたサイトの1番目をお使いでしたが、2番目のオプションをお試しください。

> If the model class is namespaced differently than the controller you will
> need to specify the :class option.

ざっと翻訳すると、

> もし controller と class の名前が異なるなら、 :class オプションを使う必要があります。

よって、`class` オプションの方を使って、下記のように書くことができると考えます。

[code]

    class ProductsController < ApplicationController
      load_and_authorize_resource class: "User"
    end
    
[/code]

# 2016-06-02 21:07 追記

試したところ、変数名に誤解がありましたので、追記します。

[code]

    class DashboardController
      load_and_authorize_resource class: "User"
    
      def index   
        Rails.logger.debug @users              # => nil
        Rails.logger.debug @dashboards.to_sql  # => SELECT "users".* FROM "users"
      end  
    end
    
[/code]

参照しているクラス名ではなく、controller 名の変数名に格納されていました。  
上記をコピーして、お試しになられると良いかもしれません。  
(もしかして、`def index` が無かったりないでしょうか？)


CC BY-SA 3.0
2016-06-02T01:01:40.030
25368
2016-06-02T12:32:42.033
2016-06-02T12:32:42.033
7471
7471
25361
answer