Railsでドットを含むURLのルーティングを実現する Segment Constraints

スポンサーリンク

Rails のルーティングのデフォルトの挙動では .(ドット/ピリオド)はフォーマット(html/json/xml/csv など)との区切り記号として使われるため、URL の動的セグメントの部分にドットを含めることはできません。

— 環境 —
rails 4.1

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

URL にドットが含まれるとエラー

例えば、以下のようなルーティングを設定した場合、:postname の部分にはドットを含めることができない。

ルーティングの動的セグメント部分に .(ドット)が含まれる URL の場合、私の環境では 404 error になったり、違うページにリダイレクトされたりなどのエラーが発生しました。

Segment Constraints 機能で解決

これに対処するために、ルーティングで Segment Constraints という機能を利用しました。

3.8 Segment Constraints | Rails Routing from the Outside In — Ruby on Rails Guides

:postname に許可する文字列を正規表現で指定します。

今回の場合は、/(スラッシュ)以外の文字列を許可。これで、ドットも :postname の動的セグメント部分に、含むことができるようになる。私の環境でもエラーが解消されました。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!