自分で実験的に作っているサイトでデバイス毎にviewを切り分けたいなと思い、以前軽く試したActionPack Variantsを使ってみたので、忘れ無いようにメモを残す
ActionPack Variantsでviewを切り分ける流れ
ざっくりと流れをいうと
- uaを見てどのデバイスからのアクセスか判定する
- 判定して例えばtabletだとしたら、
request.variant = :tabletをセット
- 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に切り出したりしました。