2011-01-21 21 views
2

私は通常のApplicationControllerクラスを持っています&私はAdmin :: ApplicationControllerクラスを持っています。問題は、Admin :: ApplicationControllerがロードされたり実行されたりしていないように見えることです。名前空間のアプリケーションコントローラを持つことはできませんか?私がCanCanで管理しているかどうか確認することができるように、CanCan &がそうでない場合にそれらをリダイレクトすることができます。名前空間ApplicationController in Rails

答えて

4

このコントローラをAdmin::BaseControllerと呼んでください。これは、アプリケーションのために何もするよりも名前空間の基盤として機能する方が多いからです。あなたがしたいことをするためには、すべての管理者の名前空間付きコントローラをこのコントローラから継承させる必要があります。

+0

こんにちはRyan、コントローラーの名前を変更する理由を説明する機会はありますか?ちょうどうまく動作する機能的なAdmin :: ApplicationControllerを持っているので、私は思っています。それは名前空間のポイントではありませんか? –

+0

それはApplicationControllerではありません。名前空間のための基底*は、どこからでも継承されます。私の主な理由は、私たちがモデルから継承した 'ActiveRecord :: Base'だからです。ちょっとした一貫性。 –

+0

ありがとうございます。私のアプリでは、一貫性は別の方法です。 Admin :: ApplicationControllerはActionController :: Baseから継承します。すべての目的と目的のために、/ adminはメインアプリ内の別のアプリです。それは私のためにかなりうまくいく。 –

1

このような名前空間を見たのは、コントローラがサブフォルダにネストされているときだけです。だから、管理者:: ApplicationControllerには、コントローラであることを期待する/管理/ application_controller.rb

一つの可能​​な解決策:

あなたがそれらを追い出すためにあなたのホーム・ページ以外のすべてをしたい場合は、単にあなたのアプリケーションコントローラにbefore_filterを設定

ApplicationController.rb

before_filter :authorize_admin 

def authorize_admin 
    //dostuff 
end 

HomeController.rb

:このようなホーム/インデックスのための例外を除いて210
skip_before_filter :authorize_admin, :only => ['index'] 

ここで、indexはスキップするアクションです。唯一オフのままにして、コントローラー全体のフィルターをスキップしてください。

+0

私は 'before_filter'で認証メソッドを使うほうが簡単だろうと思っています。名前空間を使用することは、私にとっては不要な複雑さのようです。 –