Rails:从has_many中拉取值:通过模型中的关系

时间:2013-01-22 21:36:14

标签: ruby-on-rails-3 associations 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

我想要的是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))?!?

1 个答案:

答案 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)

我希望有所帮助。