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
我想要的是User
上的一个方法,我可以查询该方法以找出该用户在给定事件中的状态。类似的东西:
def attendee_status(event)
res = self.reservations.where(event: event.id).first
if res
res.status
else
0
end
end
我对关联语法感到困惑,其中包括... column reservations.event does not exist
每个用户应只对任何特定事件保留一个... first
假设。 (更好的方法?)
无论如何,status
模型上的Reservation
方法应该返回%w[not_attending, awaiting_payment, payment_received]
从模型到模型处理这些关系/查找的“Rails方式”是什么(甚至可能从更清晰的方法名称开始:attendee_status(event)
)?!?
答案 0 :(得分:1)
User.reservations
是一个集合,User.events
是一个集合。由于您的直通关联是通过belongs_to
链接的,因此两个集合的大小相同(假设所有预订都有事件)。
User.reservations.event
不存在,但User.reservations.first.event
会(假设至少有一次预订)。
第一个调用是类上的函数Reservation::event
,第二个调用是类的实例上的Reservation#event
。在集合上调用Reservation::first
会返回一个实例。
我认为你只需要像这样修理这条线:
res = self.reservations.where(event_id: event.id)
我希望有所帮助。