这很简单,但是在框架/语言之间切换回来让我自己怀疑。试图在Rails中计算has_many :through
关系的路由。
#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或页面重新加载)他们会进行“预订”。
出于同样的原因,我需要路由来查看对给定事件有预订的每个用户。 并且保留给定用户的每个事件。
答案 0 :(得分:7)
好问题!我想我会选择这套路线:
resources :events do
resources :reservations, only: [:new, :create, :destroy]
end
resources :users do
get 'reservations', :on => :member
end
您的预订将与活动密切相关。我认为从建模的角度来看这是有道理的。根据您的描述,听起来像登录用户将点击链接以在事件下创建预订。通过将预订与事件相关联,您可以知道仅通过路线构建预订的事件,并且因为您拥有经过身份验证的用户,您可以假设使用哪个用户(可能来自您的会话)。例如,POST到/events/5/reservations
之类的路由会为当前登录的用户创建事件5的预留。
get
资源上的其他user
操作允许您提供端点来回答问题What reservations does a particular user have?
理想情况下,您希望确保只有一组端点用于管理资源。在通过非资源操作获取其他信息方面,更多的是偏好问题以及您希望支持的用例。
答案 1 :(得分:1)
我会用它来干燥路线:
def reserv
resources :reservations, only: [:new, :create, :destroy]
end
resources :users do
reserv
end
resources :events do
reserv
end