QA@IT

リクエストごとにview_pathを換えることは可能でしょうか?

3466 PV

例えばサブドメインごとやアクセスしているブラウザーの種類(スマフォなど)によって使うviewを切り替えたいのですがどういう方法がよいでしょうか?

回答

prepend_view_pathを使うのはどうでしょうか? AbstractController(ActionControllerのスーパークラス)内でクラスメソッド、インスタンスメソッドの両方用意されています。

http://apidock.com/rails/AbstractController/ViewPaths/ClassMethods/prepend_view_path
http://apidock.com/rails/AbstractController/ViewPaths/prepend_view_path

Rails立ち上げの時に一度だけ設定するのならクラスメソッドを呼べば良いのですが、リクエストごとに切り替えたい場合は、以下のようにApplicationControllerの中で以下のように定義可能です。

class ApplicationController < ActionController::Base
  before_filter :detect_subdomain

  def detect_subdomain
    prepend_view_path([Rails.root, 'app', 'views', request.subdomain].join('/'))
  end

そうしておいた状態で以下のようにsubdomainごとのviewを用意しておけばリクエストごとにちがうviewを描画するはずです。

/app/views/posts/index.html.erb
/app/views/subdomain_a/posts/index.html.erb                     
/app/views/subdomain_b/posts/index.html.erb
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。