https://rails-bestpractices.com/posts/2011/06/02/create-base-conroller/
偉大な本家様
自分の勉強用に Rails Best Practiceシリーズを翻訳します。
Before
コードを明確にするために、通常は同じビジネススコープのコントローラを同じディレクトリに置きます。多くの場合、これらのコントローラはいくつかの機能を共有しているので、DRY用のベースコントローラを作成することができます。
例えば、content管理のためのコントローラのリストがあります。
admin
content
articles_controller
comments_controller
scores_controller
other
others_controller
通常、adminディレクトリ以下のコントローラはcurrent_userがadminである必要があるので、各コントローラごとに before_filter :admin_required
を追加する必要があります。これを行うには、どこで行うのがよいのでしょうか?adminの “base “コントローラです。
baseコントローラを追加した後のファイル構造
admin
content
articles_controller.rb
comments_controller.rb
scores_controller.rb
base_controller.rb
other
others_controller.rb
base_controller.rb
admin/base_controllerのコード例
class Admin::BaseController < ApplicationController
before_filter :admin_required
protected
def admin_required
# implementation
end
end
admin/content/base_controllerのコード例
class Admin::Content::BaseController < Admin::BaseController
before_filter :find_article
protected
def find_article
@article = Article.find_by_id(params[:id])
end
end
For controllers under admin/content, they just need to inherit from admin/content/base_controller.
baseコントローラに入れられる(入れるべき)例をいくつか紹介します。
- アクセス制御
- レイアウトセレクタ
- ほとんどのアクションで使用される変数を初期化します。(上記の例の@articleのように)
コメント