スカイプ英会話のカフェトークでは生徒、講師、管理者でそれぞれネームスペースをもってるんですが、各ネームスペースで application_controller のように、一つの親コントローラに共通メソッドをまとめたいと思いました。
まず、application_controller.rb に全てで使う共通メソッドなどを入れる。
class ApplicationController < ActionController::Base
include SslRequirement
before_filter :set_user_language
before_filter :set_timezone
def set_timezone
Time.zone = session[:tz] if session[:tz]
end
private
def set_user_language
I18n.locale = params[:locale] || 'ja'
end
end
次に、例えば管理者 admin ネームスペースで使うルートコントローラを作る (admin_root_controller.rb)
class AdminRootController < ApplicationController
ssl_required :all
before_filter :authenticate_admin
before_filter :admin_login_required
def admin_login_required
if session[:admin_id]
return true
else
flash[:warning]= t('common.please_login')
unless request.request_uri == "/admin/login/logout"
session[:return_to_path] = request.request_uri
end
redirect_to :controller => "admin/login", :action => "index"
return false
end
end
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "xxxxx" && password == "xxxxxxxxxxxx"
end
end
protected
def ssl_required?
Rails.env.production? #本番環境以外はSSL しない
end
end
最後に普通のコントローラー
class Admin::LoginController < AdminRootController
layout 'admin'
skip_before_filter :admin_login_required
def logout
end
def login
end
end
こんな感じ・・・
0 件のコメント:
コメントを投稿