0

私は、Rails 3 ルートに関する非常にトリッキーな問題で立ち往生しており、これを自分で解決するには十分なルートがありません。「表示」と「インデックス」アクションのみの「レビュー」リソースがあります。スラッグ ID には Friendly ID gem を使用しています。ネストされたコメント リソースもあり、レビューにコメントすることができます。

resources :reviews, :only => [:index, :show] do
  resources :comments, :only => [:new, :create]
end 

したがって、これまでのところ、インデックス ページのパスは単に「レビュー」であり、ショー アクションの場合は「レビュー/マトリックス」のようなものです。これまでのところ十分に単純です。

まず最初に、メインのインデックス ページで問題が発生しました。インデックス ページに will_paginate ジェムがあり、ページをキャッシュしています。問題は、パスが /reviews?page=2 のようなパスの場合にキャッシュが機能しないことです。むしろ、ページネーションを通過するときにパスを /reviews/2/ にする必要があるため、前のレビュー リソースの上に次のように追加しました。これを機能させます。

match 'reviews(/:page)' => 'reviews#index', :constraints => { :page => /[0-9]/ }

なぜ制約?上記の行 (数の制約なし) は、「表示」ルートを妨害する「キャッチオール」になってしまうため、私の「表示」リソース ルートは機能しません。show アクションの ID は常に単語になるため、インデックスのページ分割されたページには常に番号が付けられるため、このようにしました。

しかし、ここに問題があります。「ショー」ルートを単に「レビュー/マトリックス」にしたくありません。ほら、すべてのレビューはレビューされているものの種類によって分類されているので、実際には「ショー」パスを「レビュー/映画/マトリックス」または「レビュー/本/ロードオブザリング」のようにしたいと思います.'

「レビュー/書籍」などの追加のカテゴリ インデックス ページには、元のレビューの「表示」パスを使用したいと思います。(上記の制約の別の理由。)しかし、この質問を複雑にしすぎたくないので、別のSOの質問のためにそれを保存します。

では、前の質問に戻ります。通常、レビュー リソースにネストされたコメントがあることを除いて、上記は単純な「一致」ルート (ルート グロビングを使用) で解決できると思います。レビューでコメントのネストされたリソースを保持しながら、上記のような「表示」ページを作成するにはどうすればよいですか?

4

1 に答える 1

0

汗をかかない(これがあなたの言いたいことなら)。

match 'reviews(/:page)' => 'reviews#index', :constraints => {:page => /[0-9]+/}
match 'reviews/comments/:id' => 'comments#my_action', :constraints => {:id => /[0-9]+/}
match 'reviews/:path' => 'reviews#show', :constraints => {:path => /.+/}
  • 3番目の命令に制約を追加すると、で使用できるようになり/ます:path。(それは本当です:制約をまったく使用しないと、foo/barこのパターンに一致することはできません。)(正規表現の代わりに/.+/、あなたは望むかもしれませ/[a-zA-Z/]+/んが、以前のパスはすでにあるべきではないすべてのものをキャッチしているので、それは問題ではありません#show。)
  • 注文が重要です。これらの3つを表示される順序で保持します。
于 2012-06-04T19:57:52.730 に答える