4

これは非常に簡単ですが、フレームワーク/言語を切り替えると、自分自身を疑うようになります。has_many :throughRailsで関係のルートを考え出そうとしています。

#User
has_many :reservations, :dependent => :destroy
has_many :events, :through => :reservations

#Reservation
belongs_to :user
belongs_to :event

#Event
has_many :reservations, :dependent => :destroy
has_many :attendees, through => :reservations, :source => :user

ユーザーモデルから特定のイベントへの新しい予約をすばやく作成/作成できるルートが必要ですが (逆も同様)、それらを作成する方法がわかりません。これは奇妙に見えます:

resources :users do
  resources :reservations, only: [:new, :create, :destroy]
end

resources :events do
  resources :reservations, only: [:new, :create, :destroy]
end

とにかく、検証、またはおそらくこれを処理する別の方法を探しています。理想的には、イベントの隣のページにリンクがあり、ユーザーがクリックして (ajax またはページのリロードのいずれかを介して) 「予約」を行うことができます。

同様に、特定のイベントを予約しているすべてのユーザーを確認するためのルートが必要です。そして、特定のユーザーが予約されているすべてのイベント。

4

2 に答える 2

7

良い質問!私はこの一連のルートで行くと思います:

resources :events do
  resources :reservations, only: [:new, :create, :destroy]
end

resources :users do
  get 'reservations', :on => :member
end

ご予約はイベントと密接に結びついています。これはモデリングの観点からは理にかなっていると思います。あなたの説明によると、ログインしているユーザーは、イベント中にリンクをクリックして予約を作成するようです。予約をイベントに関連付けることで、ルートから予約を作成するイベントがわかります。また、認証されたユーザーがいるため、どのユーザーを使用するかを推測することもできます (おそらくセッションから)。たとえば、POST to のようなルート/events/5/reservationsは、現在ログインしているユーザーのイベント 5 の予約を作成します。

リソースに対する追加のgetアクションuserにより、質問に答えるエンドポイントを提供できますWhat reservations does a particular user have?

理想的には、リソースを管理するためのエンドポイントのセットが 1 つだけであることを確認する必要があります。リソース以外のアクションを介して追加情報をフェッチするという点では、それは好みの問題であり、サポートしたいユースケースです。

于 2013-01-18T00:51:14.797 に答える