同一のbefore_filterを使用する複数のコントローラーがあります。物事を乾いた状態に保つために、すべてのコントローラーが使用できるように、このメソッドはどこに配置する必要がありますか?理由はわかりませんが、モジュールは適切な場所ではないようです。コントローラーにはすでに異なるスーパークラスがあるため、基本クラスに入れることはできません。
質問する
6042 次
4 に答える
30
before_filterとメソッドをモジュールに入れて、各コントローラーに含めるのはどうですか。このファイルをlibフォルダーに置きます。
module MyFunctions
def self.included(base)
base.before_filter :my_before_filter
end
def my_before_filter
Rails.logger.info "********** YEA I WAS CALLED ***************"
end
end
次に、コントローラーで、あなたがしなければならないのは
class MyController < ActionController::Base
include MyFunctions
end
最後に、libが自動ロードされるようにします。config / application.rbを開き、アプリケーションのクラスに以下を追加します。
config.autoload_paths += %W(#{config.root}/lib)
于 2012-08-14T13:47:25.043 に答える
4
このようなことができます。
Class CommonController < ApplicationController
# before_filter goes here
end
Class MyController < CommonController
end
class MyOtherController < CommonController
end
于 2012-08-13T18:39:56.853 に答える
3
before_filter
コントローラの共有スーパークラスにを配置します。継承チェーンをはるかに上って、これが最終ApplicationController
的にbefore_filter
なる必要があり、適用すべきではない一部のコントローラーにを適用する必要がある場合はskip_before_filter
、それらの特定のコントローラーで使用する必要があります。
class ApplicationController < ActionController::Base
before_filter :require_user
end
# Login controller shouldn't require a user
class LoginController < ApplicationController
skip_before_filter :require_user
end
# Posts requires a user
class PostsController < ApplicationController
end
# Comments requires a user
class CommentsController < ApplicationController
end
于 2012-08-13T18:42:32.567 に答える
1
すべてのコントローラーに共通の場合は、アプリケーションコントローラーに配置できます。そうでない場合は、新しいコントローラーを作成し、それをすべてのスーパークラスにして、コードをその中に入れることができます。
于 2012-08-13T18:38:06.873 に答える