Ruby on rails Rails:在多个嵌套的restful路由中嵌套同一资源?

Ruby on rails Rails:在多个嵌套的restful路由中嵌套同一资源?,ruby-on-rails,routes,has-many-through,Ruby On Rails,Routes,Has Many Through,这很容易,但在框架/语言之间来回切换让我怀疑自己。试图找出的路由在Rails中有很多:通过关系 #User has_many :reservations, :dependent => :destroy has_many :events, :through => :reservations #Reservation belongs_to :user belongs_to :event #Event has_many :reservations, :dependent => :

这很容易,但在框架/语言之间来回切换让我怀疑自己。试图找出
的路由在Rails中有很多:通过
关系

#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或页面重新加载),然后进行“预订”

出于同样的原因,我需要路由来查看对给定事件有预订的每个用户。
以及为给定用户保留的每个事件

好问题!我想我会选择以下路线:

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
操作允许您提供一个端点来回答问题
特定用户有哪些保留?


理想情况下,您希望确保只有一组端点用于管理资源。就通过非资源操作获取额外信息而言,这更多是一个偏好问题,以及您希望支持哪些用例。

我将使用此选项来干燥路由:

def reserv
  resources :reservations, only: [:new, :create, :destroy]
end

resources :users do
  reserv
end

resources :events do
  reserv
end

此外,如果您将
资源:预订
放在
事件
用户
下,这将使您的预订控制器代码很难管理,因为您需要不断检查您是否有事件id或用户id。因此,为了保持理智,这也会有所帮助。:)