Rails4.1から導入されたActionPack Variantsを使ってviewを切り分ける
自分で実験的に作っているサイトでデバイス毎にviewを切り分けたいなと思い、以前軽く試したActionPack Variantsを使ってみたので、忘れ無いようにメモを残す
ActionPack Variantsでviewを切り分ける流れ
ざっくりと流れをいうと
1. uaを見てどのデバイスからのアクセスか判定する
2. 判定して例えばtabletだとしたら、request.variant = :tabletをセット
3. render処理で「app/views/hogehoge/**.html+tablet.slim」の中身をレンダリングする
今回使った方法
ua判定
上記の流れの通りなのだが、1のua判定のところをどうしようかなぁって思っていたら、別の方がbrowserというgemを使ってやっていたので、そのgemを使うことにした。
これを使うと例えば、
request.variant = : tablet if browser.device.tablet?
みたいな実装ができるので、これを使うことにした。
コード例
hoges_controller.rb
class HogesController < ApplicationController
before_action :set_request_variant
private
def set_request_variant
request.variant = :tablet if browser.device.tablet?
request.variant = :android if browser.platform.android?
end
end
index.html+tablet.slim
| tablet端末だよ
index.html+android.slim
| Android端末だよ
こんな感じのコードになります。
実際は多分ua判定のロジックはconcernに切り出すか、親クラスに書いてやるのが良いかと思います。
今回はconcernに切り出したりしました。
Author And Source
この問題について(Rails4.1から導入されたActionPack Variantsを使ってviewを切り分ける), 我々は、より多くの情報をここで見つけました https://qiita.com/s_nakamura/items/8c626e1340b14eec0683著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .