私はRails 2.3.11に取り組んでいます。私がhttp://www.abc.com/users/e.f.jsonのようなURLを持っているならば、私はidが 'e.f'であり、期待されるフォーマットが 'json'であると期待します。誰かがそれをやる方法を提案してもらえますか? ありがとうございました!railsのルートidにドットをつける
7
A
答えて
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つにすることが重要です。
関連する問題
- 1. Railsページの3つのルート
- 2. リファクタリングRailsの3つのルート
- 3. ASP.NET MVC URL(ドット)をサポートするルート
- 4. Rails IDと異なるものに基づくルート
- 5. Railsテストユニット:モデルの未使用IDを見つける方法
- 6. Railsルートに表示されるルートを見つけることができません。
- 7. ネームサーバの末尾にドットまたはドットを受け入れる
- 8. after_validation Railsで既存のレコードのIDを見つけよう
- 9. ASP.NET MVC 2 Issue - ルート内のドット
- 10. C#ソケットIDを見つけるには?
- 11. カスタムRailsのルート
- 12. Railsの3ルート
- 13. Railsルートのヘルプ
- 14. ASP-ルートIDが
- 15. Opa5テスト中に現在のルートを見つけるには?
- 16. URL RailsルートのRailsハッシュパラメータ
- 17. Railsのルートにセキュリティを追加する
- 18. 2レベルのネストされたルートのgrand_parent idを避けるには?
- 19. Railsルート:ネストされたルートに一致
- 20. 現在のページのルートを見つけるには?
- 21. RailsのNoルートが見つからない必要なキーに一致する:[:ID]
- 22. 私はここでIDやない</p> <p>を受け入れるルートが私のルートであることを確認するにはどうすればよいのIDを取るRailsの3ルートか
- 23. RailsルートのカスタムURL
- 24. APIドキュメントのRailsルート
- 25. Railsのルート問題
- 26. Rails:カスタムコントローラアクションへのルート
- 27. Railsのルート - 試合
- 28. アルファベット順のRailsルート
- 29. Rails 3.1 APIルート
- 30. URL Railsルートにハッシュパラメータを追加する
私は2.3のルート構文に慣れていませんが、ピリオドを禁止するためにフォーマットに制約を追加することができます。これはフォーマットを最後のドット区切りセグメントだけに保つのに役立ちますが、書式をそのままにしておくと、あなたのIDの一部が書式として使われてしまいます。 – coreyward
[Rails - "dot"(例:/google.com)]のパラメタ(http://stackoverflow.com/questions/2952235/rails-params-with-dot-e-g-google-com) –