Railsで1つのviewに複数のURLを与えるrouting
先日、少し特殊なルーティングを実装した。
viewとしては普通のnew
フォームなのでURL的には/counselings/new
とするのが普通なのだが、以下の理由から/counselings
というURLでもnew
をrenderするようにしたいとの要望がきた。
- メール等にも記載するURLなのでなるべく短くしたい
- このページはこの機能のトップページでもあるので
/counselings
でREST的にも間違ってはいないだろう
何も考えずにroutesを書くとこうなるだろう。
get '/counselings' => 'counselings#new' resources :counselings, only: [:new]
ただ、さすがにこれは醜い。 Railsに詳しい有識者に伺いを立てたところ、以下ような書き方を教えていただいた。
get 'counselings(/new)' => 'counselings#new'
ルーティングの中で正規表現を使えるようだ。知らんかった(´・ω・`)スゲー!!
しかし、同じページに複数のURLが存在するのは、どうもSEO的にあまりよろしくないらしい。
ということで結局!Redirectさせるということで落ち着いたw
やっぱり、1つのviewに複数のURLを与えるのはよろしくないよねー
get '/counselings' => 'counselings#new', as: 'new_counseling' get '/counselings/new' => redirect('/counselings')
若干醜いが、特殊な処理をしている感が滲み出ているし、まあこれくらいでよいのでないか。
ちなみに、このとき知ったのだが、routingのredirectionにはparameterを使った書き方もできるようだ。
get '/stories/:name', to: redirect {|params, req| "/posts/#{params[:name].pluralize}" } get '/stories', to: redirect {|p, req| "/posts/#{req.subdomain}" }
ref: http://guides.rubyonrails.org/routing.html#redirection
Crafting Rails 4 Applications: Expert Practices for Everyday Rails Development (The Facets of Ruby)
- 作者: José Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2014/02/04
- メディア: Kindle版
- この商品を含むブログを見る