0

rails3アプリケーションを作成していますが、現時点では、routes.rbファイルに次の行があります。

get "/:id" => 'tapes#show'

言い換えると、を使用してテープを表示することもできます (私は、friendly_id gemも使用しているので、ユーザーは実際にはの形式のフレンドリURLを見ることができます)website.com/tapes/1using website.com/1website.com/tapename

さて、私が達成したいのは、ユーザーページに対して同じことをすることです。したがって、を使用してユーザーページを表示する代わりに、website.com/users/alexも使用できるようにしたいと思いますwebsite.com/alex

この「users」ロジックを既存の「tapes」ルールと一緒にroutes.rbに実装し、どういうわけか優先順位を設定する方法はありますか?したがって、誰かがwebsite.com/alex私のアプリにアクセスした場合、ID'alex'のユーザーレコードがあるかどうかを検索し、何も見つからない場合は、ID'alex'のテープを探します。

ルートである種の高度な制約を使用できますか?何か案は?

助けてくれてありがとう、

アレックス

4

1 に答える 1

1

Rails には、アクセスしようとしているコントローラーを特定する方法がありません。これが可能になる唯一の方法は、次のいずれかの場合です。

  1. 名前の正規表現に基づいて、どのモデルに解決されるかを判断できます。また

  2. ユーザー名とテープ名が決して衝突しないことを知っていたので、正しいコントローラーを解決するためにデータベースにアクセスするコストを喜んで受け入れました。

これはおそらく多くの理由で悪い考えです。パフォーマンスに影響を与えるRESTful可能性があり、原則にも準拠していません。また、ユーザーを混乱させる可能性があります。

于 2012-04-05T13:50:22.047 に答える