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

各ユーザーは、特定のイベントの予約を 1 つだけ持つ必要firstがあります...それを前提としています。(より良い方法?)

とにかく、モデルのstatusメソッドは次のいずれかを返す必要がありますReservation%w[not_attending, awaiting_payment, payment_received]

モデルからモデルへのこれらの関係/ルックアップを処理するための「Rails の方法」は何ですか (おそらく、より明確なメソッド名から始めることもできます: attendee_status(event))?!?

4

1 に答える 1

1

User.reservationsコレクションでUser.eventsあり、コレクションです。through 関連付けは を介し​​てリンクされているためbelongs_to、両方のコレクションは同じサイズです (すべての予約にイベントがあると仮定します)。

User.reservations.event存在しませんが、存在しUser.reservations.first.eventます (少なくとも 1 つの予約があると仮定します)。

Reservation::event最初の呼び出しはクラスの関数で、2 番目の呼び出しはクラスReservation#eventのインスタンスです。Reservation::firstコレクションを呼び出すと、インスタンスが返されます。

この行を次のように修正するだけでよいと思います。

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

それが役立つことを願っています。

于 2013-01-23T21:00:36.613 に答える