Ruby on Rails

【Ruby on Rails】トレイリングスラッシュをつけるための奮闘

Railsでトレイリングスラッシュをつけるときに奮闘したメモです。

背景

  • Google Search Console で 除外ページが多かった
  • 「重複しています。Google により、ユーザーがマークしたページとは異なるページが正規ページとして選択されました」を解消したい

トレイリングスラッシュを強制

config/application.rb に下記内容を追記

module Hoge
  class Application < Rails::Application

・・・

    # Add trailing slash
    config.action_controller.default_url_options = { :trailing_slash => true }
  end
end

上記設定だけだと、hoge_pathhoge_urlメソッドを叩いた戻り値にトレイリングスラッシュがつくだけ
なので、直接URLにアクセスした場合は、トレイリングスラッシュがつかない
それだと、サチコのエラーは解消しないので、下記対応を実施

Herokuを使っている場合、サーバー側でリダイレクト処理をかけづらい
あまりよろしくないが、一時的なしのぎとして アプリケーション層でリダイレクト処理をかける

class ApplicationController < ActionController::Base

・・・

  before_action :trailing_slash

・・・

  private
    # FIXME アプリケーション層で制御するのをやめたい
    def trailing_slash
      redirect_to "#{request.original_url}/", status: :moved_permanently unless request.original_url.match(/\/$/)
    end

・・・

上記をするとRSpecでエラーになってしまう
というのも、テスト実行時にhoge_pathhoge_urlメソッドを呼ぶのだが、そいつにトレイリングスラッシュがついていないから
なので、下記内容を config/environments/test.rbに追記する必要がある

Rails.application.routes.default_url_options = { trailing_slash: true }

-Ruby on Rails