リクエストのパスに応じてレイアウトを変更する

概要

既存のシステムの機能はそのままで異なるレイアウトを平行運用したい場合のTips。 コントローラ、モデルになるべく手は加えずに、新しいレイアウトをリクエストパスに応じてレイアウトを変更する。

環境

方法

メソッドの外では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