LoginSignup
7
10

More than 5 years have passed since last update.

RailsでURL末尾のスラッシュ(trailing_slash)を個別に設定

Last updated at Posted at 2016-10-12

Railsのルーティングで、末尾にスラッシュを付けたい時の話です(Rails4.x系はデフォルトではつかない)。

全部につけていい場合は、下記の様にしておしまいです。

application.rb
config.action_controller.default_url_options = { :trailing_slash => true }

全部ではなく、パスによって付けたり付けなかったりしたい場合は下記のようにします。

routes.rb
get '/item'  => 'item#index',   trailing_slash: true # スラッシュ付き
get '/item/hoge'  => 'item#hoge'  # スラッシュなし

これで、/itemlink_toなどで出力されるリンクに/item/のようにスラッシュが付きます。
/item/hogeの方はスラッシュが付きません。

最後に、ダイレクトに/itemにリクエストがあった時に/item/へリダイレクトする処理もやっておきたいです(今のままだと/itemもそのまま普通に表示されてしまいます)。Rack層でやるのが良いような記事も見かけましたが、できればRails内で処理したい…。

ちょっと見通しが悪くなるのですが、コントローラー内に書いてあげると実現できました。

複数コントローラーで同じことをしたいこともあると思うので、まずは下記。

application_controller.rb
# trailing_slashがついてない場合、slash付きのパスにリダイレクトする
def force_trailing_slash
  redirect_to "#{request.original_url}/" unless request.original_url.match(/\/$/)
end

そして、夫々のコントローラーのリダイレクトしたいアクションにこのフィルタをかまします。

item_controller.rb
before_filter :force_trailing_slash, only: 'index'

これで、/item/item/にリダイレクトされるようになります。


この記事は2015.4.10にこちらのURLで公開していた内容を移行しました。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10