0

カスタムルートをセットアップしましたが、うまくいくようです。ただし、同じコントローラーのリソース ルートもあります。何か間違ったことをしているだけだと思いますが、それが何であるかはわかりません。ルートを設定する方法と、いつどの方法を使用するかについてまだ少し混乱しているため、ルートを正直にハックしています。

ここに私が今扱っている私のルートがあります。

resources :shows
match "shows/:country" => "shows#index"

のようなルートはリソースです:showsはうまく機能しますが、一致しません。それらを反転すると、一致ルートは正常に機能しますが、リソース :shows は機能しません。

これを名前空間化されたルートとして行う必要がありますか? 私は何をすべきか正確にはわかりません。私が達成しようとしているのは、このようなものです。

http://site.com/shows/canada

これにより、すべての Candian ショーが返されます。

どんな助けでも大歓迎です。

4

2 に答える 2

2

おそらくやりたいことは、制約を使用することです。または、カスタムの制約クラスを使用することもできます。これは私がテストしていない大まかなスタートであり、それが機能するかどうかは不明です。

resources :shows, :constraints => { :id => /[0-9]+/ }
match "shows/:country" => "shows#index", :constraints => { :country => /[a-z]+/ }

通常、これは get クエリ パラメータを介して行われることに注意してください。たとえばhttp://example.com/shows?country=canada、これはすでにshows#indexアクションに渡され、 にparams[:country]設定されてい"canada"ます。

于 2011-02-28T00:30:22.710 に答える
0

それに応じて期待してルーティングするデフォルトルートに噛まれている可能性があります/{controller}/{action}。デフォルトルートを削除してみてください。すべてのルートを確実に宣言する必要がありますが、その結果、アプリのルート セットがより予測しやすくなります。

于 2011-02-28T00:37:25.667 に答える