2021年9月9日 パーフェクト Ruby on Rails
variants
条件によってテンプレートの切り替えができる機能です。接続してきた端末によってPCとは別のテンプレートを表示したいという場合に有効です。
class ApplicationController < ActionController::Base before_action :detect_mobile_variant private def detect_mobile_variant request.variant = :mobile if request.user_agent =~ /iphone end
#app/views/books/show.html+mobile.erb 略 <h1>本の情報(for mobile)</h1> 略
/iphoneの前にある=~はなんだろうと思いました。
=~の戻り値はマッチすれば真、マッチしなければ偽を表すため、if文などの条件分岐でもよく使われます。
今回の場合はアクセスしたのが/iphoneかどうかを後置ifを使って条件分岐しているという事ですね。
正規表現と文字列を比較する場合によく使われます。
request.user_agentとは
ユーザーエージェント (User Agent)とは、ウェブサイトへアクセスする際に使用されるプログラム、あるいはそれらを識別するための文字列のことを指す。
こちらのQiita記事に詳しく記載されています。rack-user_agent
というgemがとても便利ですね。
https://qiita.com/reeenapi/items/5c088561363cd8b00332
PC専用のサービスを作っていて、モバイル専用のページを作りたいときにvariants
はとても便利ですね。
ひとこと
ひとりでも継続します。
参照
Ruby 3.0.0 リファレンスマニュアル instance method String#=~
https://docs.ruby-lang.org/ja/latest/method/String/i/=3d=7e.html
正規表現とは
https://userweb.mnet.ne.jp/nakama/
Railsドキュメント request.user_agent
https://railsdoc.com/page/request
ユーザーエージェント
https://www.irep.co.jp/knowledge/glossary/detail/id=10210/
RailsでUserAgentの情報を取得して簡単に扱いたい
https://qiita.com/reeenapi/items/5c088561363cd8b00332