0
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))?!?

4

1 回答 1

1

User.reservations是一个集合,User.events是一个集合。因为您的直通关联是通过 a 链接的,belongs_to所以两个集合的大小相同(假设所有预订都有一个事件)。

User.reservations.event不存在,但User.reservations.first.event会存在(假设至少有一个保留)。

第一个调用是Reservation::event类上的函数,第二个调用是类Reservation#event的实例。调用Reservation::first一个集合会给你一个实例。

我认为你只需要像这样修复这条线:

res = self.reservations.where(event_id: event.id)

我希望这会有所帮助。

于 2013-01-23T21:00:36.613 回答