質問: ルーティングについて悩んでいるので意見をお聞かせください。 現在予約システムを作っているのですが、予約をする側をuser,予約を受ける側をstoreとします。 userはstoreに向け予約をし、storeは予約状況を確認できます。 予約はreservationコントローラによって処理されます。 MVCの考え方でいくとCRUDを用いてシンプルに設計するのが良い方法だと思いますが、行いたい処理、取得したい値、異なる画面を出力したい場合、どういうURLにしどのコントローラに飛ばすのが良いでしょうか? 1 例えばuserの予約一覧を取得したい時と、storeに入った予約一覧を取得したい時でURLを変え、コントローラも変えなければならないでしょうか? この場合、コントローラに含まれるメソッドはCRUDというシンプルな物だけではなく、getUserReservationやgetStoreReservationなど分けなければならないかと思います。 URL : /reservation/user_id/params[:user] コントローラ : ReservationController#read user_idとuserと判定できる値を送る、readメソッドの条件分岐により、user_idを用いて、予約一覧を取得する 2シンプルに済ませるのであれば、CRUDのreadメソッドで取得した値によって条件分岐させ、取得する方法もあるかと思います。取得するパラメータとして必要になってくるのが、userのものかstoreのものかというのを判断できる値だと思います。 また、この方法を取る場合、URLは同一のものではなく、URLは異なり、コントローラのメソッドは同一のものに送るかと思います。 URL : /getUserReservation/user_id/ コントローラ : ReservationController#getUserReservation 1、2ではどちらが良い方法なのでしょうか? その他に良い手法などあれば教えていたいです。 --- 追記 1、2以外に、userコントローラ、storeコントローラに独自のメソッド、getReservationなどを作って、取得する方法はいかがでしょうか?
回答: 予約を中心に考えて、Reservationモデルを持つのが良いかと思います。 予約は単一のIDでシンプルにアクセスできたほうが、後々楽かと思います。 予約確認 /reservations/:id (1)でもCRUDにできて、URLを分けたほうが結果的に見やすくて良いかもしれません。 ユーザーの予約一覧 /users/:id/reservations ストアの予約一覧 /stores/:id/reservations