6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails4.1から導入されたActionPack Variantsを使ってviewを切り分ける

Posted at

自分で実験的に作っているサイトでデバイス毎に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に切り出したりしました。

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?