2012-06-03 104 views
0

我正在開發一個人們組織遊戲會話的項目。 (刪節)模型如下。Activerecord:無法獲取:通過=>上班

class User < ActiveRecord::Base 
    has_many :events, dependent: :destroy  #events organized by user 
    has_many :reservations, dependent: :destroy 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
    has_many :reservations, dependent: :destroy 
end 

class Reservation < ActiveRecord::Base 
    belongs_to :events 
    belongs_to :users 
end 

這樣,當我使用@user.events我得到的,符合市場預期,用戶組織事件的列表。

但我想的是,用戶必須(使用類似@user.reserved_events預約的事件列表,所以我已將此添加到用戶模式:

has_many :reserved_events, :class_name => 'Event',:through => reservations 

這打破了一切,我得到了一個神祕

undefined local variable or method `reservations' for #<Class:0x00000003681048> 

編輯

比ks給Christopher Manning,我將reservations更改爲:reservations,從而消除了微不足道的錯誤。但是,如果我現在嘗試使用@user.reserved_eventsØ@user.reservations.count,我得到

Could not find the source association(s) :reserved_event or :reserved_events in model Reservation. Try 'has_many :reserved_events, :through => :reservations, :source => <name>'. Is it one of :events or :users? 

遵請求讓我無處:如果我使用:source => :users,我

SQLite3::SQLException: no such column: reservations.users_id: SELECT COUNT(*) FROM "events" INNER JOIN "reservations" ON "events"."id" = "reservations"."users_id" WHERE "reservations"."user_id" = 1 

使用:source => :events使得它不惜一大家子缺少不同的列

我的臨時解決方案是使用直接SQL:

@reserved_events = Event.find_by_sql("select events.* from events,reservations where events.id=reservations.event_id AND reservations.user_id="[email protected]_s)

更好的主意?

回答

0

變化reservations:reservations在線路

has_many :reserved_events, :class_name => 'Event',:through => reservations 

固定未定義局部變量或方法的錯誤。

+0

非常感謝!它應該是一件小事! – piffy

0

試試這個:

class User < ActiveRecord::Base 
    has_many :events, dependent: :destroy 
    has_many :reservations, :through => :events 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
    has_many :reservations, dependent: :destroy 
end 

class Reservation < ActiveRecord::Base 
    belongs_to :events 
end 

這應該讓你說:

@user.reservations 

事件應該有一個USER_ID領域。預訂應該有一個event_id字段。讓我知道你得到什麼問題。

+0

嗯,它的工作,有點,但它不能解決我的問題。現在我發現了一個「Just works」解決方案,它是一個普通的SQL查詢:''@reserved_events = Event.find_by_sql(「select events。* from events,reservations where events.id = reservations.event_id AND reservations.user_id = 「[email protected]_s)'。這不是「Raily」,但它是一個單行的,現在它符合法案。 ' – piffy