2009-06-26 3 views
1

朝の誰でも!Rails Routing質問:ルートの下でスラッグ/パーマリンクを直接マッピングしますか?

一般的なルーティングQuesitonここでは、私のアプリケーションのユーザーのためにこれと似たルートを実現するよう現在作業中です。

http://www.example.com/ユーザ名

これは、それゆえ、私は私のroutesファイルに次き、usersControllers#ショーにマッピングされます。

map.connect '/:パーマリンク'、:コントローラ=> "ユーザー"、:アクション=> "ショー"

私はその後でユーザを検索するには、showアクションを持っていますparamのpermalink。だからこそ動作しますが...。

私が取り組んでいる問題は、他のすべての未定義のルートがuserController#showに送られるということです。 404の&他の名称のないルート。だから、私はこれについて正しいコンベンションに行くとは思わない。私の解決策は、問題を解決する他の名前付きルートを追加することですが、私にとっては脆弱です。私はこの間違いを考えていますか?

もっと良い解決策はありますか?私はGoogleの回答に答えるつもりですが、私はこれを議論のために投げ捨てると思っていました。アイデア?

答えて

1

あなたは正しいことをしています。 Railsのルートは、高い優先順位から低い優先順位まで下に移動します。あなたのユーザーは、アクションが一番下に行くべきであることを示しています。 permalinkがユーザーに対応していない場合、適切な404が生成されることを確認してください。

+0

ありがとう、私は頭を高く評価します。私はこれを解決したと思う。私は、上記の "permalink"名前空間と他のすべての既存のURLをより高い優先度として定義しました。今それをテストする... –

1

サイトの他のURLと同じユーザー名を持つユーザーがいる場合はどうなりますか? これは起こるのを待っている問題のようです。

だけhttp://www.example.com/user/username

には、すべてのユーザ名ベースのURLの「ユーザー」の名前空間を作成し、この方法でそれを変更します。

+0

Zepplock、そう、私はそれを検討していた。しかし、私は本当に "ルート"名前空間の後ろに独自のプロファイルを持つURLの外観が好きです。私は、ユーザーが既存のURLと一致する名前を作成しないようにするために検証を組み立てるつもりです。代わりに、代わりにそれらのより静的なURLを独自の名前空間に追加します。つまり、www.example.com/pages/ ....しかし、ヒントをありがとう! –

+0

/user/usernameは煩雑です。ユーザ名を他のコントローラパスと同じにすることを追加または制限するだけです。最悪の場合、ユーザーパスが優先順位の低いルートになるため、ユーザーはアクセス不能になります。これはいくつかのデータルールを適用することで解決できます。 –

関連する問題