Rails で RESTful ルートをカスタマイズする方法 (基本)
-
21-09-2019 - |
質問
Railsのドキュメントを一通り読みました ルーティング, 安らぎのリソース, 、 そしてその URLヘルパー, 、複雑な/ネストされたルートを作成するためのベストプラクティスをまだ理解していません。私が現在取り組んでいる例はイベント用で、rsvps が_many あります。したがって、ユーザーはイベントのリストを確認し、[登録] をクリックして登録プロセスなどを実行します。URL を次のようにしたいと考えています。
/events
/events/123 # possible without title, like SO
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
/events/123/my-event-title/registration/new
... and all the restful nested resouces.
問題は、最小限のコードでこれを実現するにはどうすればよいでしょうか?
私が現在持っているものは次のとおりです。
map.resources :events do |event|
event.resources :rsvps, :as => "registration"
end
それは私に次のようになります:
/events/123/registration
他の 2 つのルートを達成するための最良の方法は何ですか?
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
どこ my-category
は、イベントが取り得る 10 種類の配列にすぎません。
修正しました Event#to_param
戻る "#{self.id.to_s}-#{self.title.parameterize}"
, 、しかし、私はそうしたいです /id/title
全体的に正規性を備えた
解決
あなたが説明する SEO に適した URL は Rails が RESTful ルートを生成する方法に準拠していないため、これらを設定するには通常のルートを使用する必要があります。例えば:
map.show_event 'events/:id/:event_title', :controller => 'events', :action => 'show'
アプリケーション内のすべてのものに対して、自動的に生成された RESTful ルートを使用する必要があるとは思わないでください。それは、あなたがやろうとしていることに必ずしも適しているとは限りません。Rails ルーティングガイドにも次のように書かれています。
Restful RoutingはRails標準になりましたが、よりシンプルな通常のルーティングが正常に機能する場所がまだたくさんあります。単一のアプリケーション内で2つのスタイルを混ぜることもできます。一般に、アプリケーションの一部を書きやすくするため、可能であれば安らかなルーティングを好むはずです。しかし、それが適切でない場合、アプリケーションのすべての最後の部分を安らかなフレームワークにシューホルする必要はありません。
他のヒント
Railsを見たことがありますか ルーティングガイド?ルーターについて理解するための多くの情報が含まれており、次のセクションが含まれています。 ネストされたリソース.