コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ActionPack variantsを使うと、Viewテンプレートファイルを分けて扱うことができる

スマホ向けにテンプレ分けたいわーというニーズ向け

環境

rails (5.0.2)

Action Pack Variants とは

Ruby on Rails 4.1 リリースノート - Railsガイド

ざっと説明すると request.variant にシンボル値をセットすることで、そのシンボル値が付加されているviewファイルを利用するようになる、というもの。

たとえば、パラメータを見てPCサイトとスマホサイトでViewの表示を変えたい場合は以下のようなことをする。

今回は app/controllers/articles_controller.rb というファイルを例に取る(routes.rbの記述は割愛)

class ArticlesController < ApplicationController
  def index
    request.variant = :sp if params[:type] == "smart_phone"
    render
  end
end

そして、variantに設定する値に準ずるviewを用意する。通常であれば…

app/views/articles/index.html.erb

というControllerに対するViewを用意すればいいが、variant用の sp に対応するviewを用意するので

app/views/articles/index.html.erb
app/views/articles/index.html+sp.erb

とすることで

  • http://example.com/articlesのようにアクセスすると app/views/articles/index.html.erb のほうが表示される。
  • http://example.com/articles?type=smart_phoneのようにアクセスすると app/views/articles/index.html+sp.erb のほうが表示される。

という挙動になる。

参考リンク