2011-08-02 29 views
7

私はRails 2.3.11に取り組んでいます。私がhttp://www.abc.com/users/e.f.jsonのようなURLを持っているならば、私はidが 'e.f'であり、期待されるフォーマットが 'json'であると期待します。誰かがそれをやる方法を提案してもらえますか? ありがとうございました!railsのルートidにドットをつける

+1

私は2.3のルート構文に慣れていませんが、ピリオドを禁止するためにフォーマットに制約を追加することができます。これはフォーマットを最後のドット区切りセグメントだけに保つのに役立ちますが、書式をそのままにしておくと、あなたのIDの一部が書式として使われてしまいます。 – coreyward

+0

[Rails - "dot"(例:/google.com)]のパラメタ(http://stackoverflow.com/questions/2952235/rails-params-with-dot-e-g-google-com) –

答えて

8

:形式の規則のため、Railsはすべてのパラメータをドットなしで解析します。あなたがしたい場合は、route parameters with dotsを持つことができます。

# You can change the regex to more restrictive patterns 
map.connect 'users/:id', :controller => 'users', :action => 'show', :id => /.*/ 

しかし、以来

両方の「*」と「+」正規表現のワイルドカードは、それが無視されます、貪欲です:完全にPARAM(フォーマット)を。フォーマットの正規表現:

map.connect 'users/:id:format', :controller => 'users', :action => 'show', :requirements => { :format => /\.[^.]+/, :id => /.*/ } 
map.connect 'users/:id', :controller => 'users', :action => 'show' 

欠点はあなたがドットを含める必要があるということです:あなたは絶対にユーザ名にドットを持つ必要がある場合

さて、あなたを助けることができる擬似回避策がありますそれ以外の場合は、ユーザー名式によって捕捉されます。次に、あなたのコントローラーでドットフォーマット(例:.json)を処理する必要があります。

2

ここではandersonvom'sに似た解決策がありますが、それをすべて1つのルールに保持しています(そして最新のRailsルーティング略語を使用しています)。

map.connect 'users/:id(.:format)', to: 'users#show', id: /.*?/, format: /[^.]+/ 

:formatの前に.注)

トリックは、任意の形式を追加(.:format)フォーマットが認識されるように、IDの正規表現は、非貪欲にすることです。ルートに名前を付ける場合は、フォーマットには依存しない方法でリダイレクト、リンクなどに使用できるようにするには、ルールを1つにすることが重要です。

関連する問題