りゅうじの学習blog

学習したことをアウトプットしていきます。

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