【Sinatra】スマートフォンかどうか判定してviewを切り替える

以下の記事を参考に,Sinatraでsmartphoneからのアクセスかどうかを判定してviewを切り替えるような処理を書いてみました.

Ruby: Sinatra で UserAgent みて iOS / Android 判別 | snippets.feb19.jp

get '/' do

    ua = request.user_agent
    @sp = 0
    @isAndroid = 0
    @isIOS = 0
    if ["Android"].find {|s| ua.include?(s) }
        @sp = 1
        @isAndroid = 1
    end
    if ["iPhone", "iPad", "iPod"].find {|s| ua.include?(s) }
        @sp = 1
        @isIOS = 1
    end
 

    if @sp == 1
      erb :index-sp
    else 
      erb :index
    end
      
end

これでAndroidiOS系のデバイスならちゃんと振り分けてくれます.

また同一viewでスマフォ用とPC用で別のスタイルシートを使いたい,というときにはhtml(slim)内で

# index.slim
 - if @sp == 1
      link[rel="stylesheet" href="css/index-sp.css"]
    - else
      link[rel="stylesheet" href="css/index.css"]

のようにすればokですね.

chromeのスマフォシュミレータでもちゃんと動きました!便利!