2

「わかりやすい」パーマリンク構造を使用して、Rails 3.2 アプリでコンテンツをルーティングしようとしています (Adam Darowski のブログ投稿1で説明されています)。単一の「ページ」または「カテゴリ」コントローラー内でこれを行う方法を説明するいくつかの回答を見つけましたが、理想的には、「部分的な」URL の場合にアプリを最も具体的なコントローラーにルーティングしたいと考えています。

http://example.com / shows / :genre / :series / :season / :episode

たとえば/shows/entertainment/the-survivors/01/01、エピソード コントローラー (特定のシリーズのシーズン 1 エピソード 1 を再生) に/shows/entertainment/the-survivors/ルーティングし、シリーズ コントローラー (そのシリーズのすべてのエピソードを一覧表示) にルーティングします。などなど。

ネストされたルーティングの深さは 1 レベルを超えてはならないというルールを聞いたことがあります。そのため、それは悪い解決策のように思えます (また、標準のネストされたルーティングは、コントローラ名と ID の両方で URL を「汚染」します/genres/entertainment/shows/the-survivors/seasons/1/episodes/1。これは避けたいと思います)。 )。

私がこれまでに見つけた最善の解決策はmatch、URL がますます具体的になるにつれて各コントローラーを指す、routes.rb ファイル内のますます具体的な一連のルールです。

Railsでこれを行うより良い方法はありますか?

4

1 に答える 1

1

私はfriendly_idのようなフレンドリーなURLgemを使用することをお勧めします。特にルーティングに何かを追加しない限り、URLの「shows」部分を削除します。次に、次のようなURLを作成できます。

/entertainment/the-survivors/s01e01

そして、各シリーズとエピソードをスラッグで見つけます(それぞれ「the-survivors」と「s01e01」)。

どちらの方法でも、質問で述べたようにルートファイルにカスタムルートを作成する必要があると思いますが、問題はありません。

ただし、2つのコントローラーを作成するというあなたの考えには同意しません。あなたの質問であなたはそれが

シリーズコントローラーにルーティングします(そのシリーズのすべてのエピソードを一覧表示します)

あなたの言語では、「すべてのエピソードを一覧表示する」と言っています。エピソードはリソースであるため、本当にRESTfulである場合は、「シリーズ」ページ自体がのアクションであり、各エピソードがのアクションである必要indexEpisodesControllerありshowますEpisodesController

于 2012-10-03T07:59:40.957 に答える