前提・実現したいこと
- Ruby on Rails 5でWebアプリケーションを開発しています。
- I18nのlocaleを用いて多言語対応をしようとしています。
- Route定義上、現在localeは省略可としています。(ソースコードをご参照ください。)
- この状況でURLにlocaleを付けてリクエストを飛ばすのですが、そのアクションでリダイレクトされると、responseヘッダのlocationとして返ってくるURLにはlocaleが付いていません。
- 書き方が悪いのかもしれませんが、あくまで省略「可能」であるにもかかわらずどうして欠落してしまうのでしょうか。routeが生成するURLヘルパーの仕様でしょうか。
発生している問題・エラーメッセージ
- リクエスト
Request URL: http://localhost/en/{:subdomain}/hoges/action1 Request Method: GET
- レスポンス
Status Code: 302 Found Content-Type: text/html; charset=utf-8 Location: http://localhost/{:subdomain}/fugas
- GoogleChromeのDeveloperToolにて確認しました。
該当のソースコード
- controller
ruby
1class HogesController < ApplicationController 2 def action1 3 redirect_to fugas_path 4 end 5end
- route
ruby
1Rails.application.routes.draw do 2 scope '(:locale)', locale: /#{I18n.available_locales.map(&:to_s).join('|')}/ do # ここでlocaleを省略可としています。 3 scope ':subdomain' # こちらは省略不可です。 4 5 resources :hoges do 6 collection do 7 get 'action1' 8 end 9 end 10 11 resources :fugas, only: [:index] 12 13 end 14 end 15end
試したこと
- リダイレクト時は_urlとして絶対パスを指定するのが正しいという記事を散見したので試してみましたが、今回の問題に関しては解決しませんでした。
あなたの回答
tips
プレビュー