リクエストのパスに応じてレイアウトを変更する
概要
既存のシステムの機能はそのままで異なるレイアウトを平行運用したい場合のTips。 コントローラ、モデルになるべく手は加えずに、新しいレイアウトをリクエストパスに応じてレイアウトを変更する。
環境
- rails 3.2.11
方法
メソッドの外ではrequest変数にアクセスできないため、コントローラに適用するlayoutにシンボルを定義し、遅延評価させる。
% bundle exec rake routes … hoge_root GET /hoge(.:format) hoge#index … hoge2_root GET /hoge2(.:format) hoge#index …
% cat hoge_controller.rb class HogeController < ApplicationController layout :hoge_layout def index end … private def hoge_layout if request.fullpath.split("/")[1] == 'hoge2' 'hoge2' else 'hoge' end end end
参考URL
- ruby/rails/RailsGuidesをゆっくり和訳してみたよ/Layouts and Rendering in Rails - 株式会社ウサギィwiki ※「2.2.13.2 実行時でのレイアウトの選択」参照