2013-01-22 28 views
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,我可以通過查詢找出該用戶在給定事件中的狀態。喜歡的東西:Rails:從has_many中拉取值:通過關係模型

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假設。在Reservation模式status方法應該返回的%w[not_attending, awaiting_payment, payment_received]

一個什麼是「Rails的方式」來處理從模型中,這些關係/看起坐模型(甚至開始用(更好的辦法?)

無論如何,更清晰的方法名稱:attendee_status(event))?!?

回答

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) 

我希望幫助。

相關問題