2014-02-22 48 views
0

我的模型中有2個出現問題。那就是:[Rails] has_many - 沒有這樣的列user.event_id ...

我的用戶類可以有許多事件

has_many :events 

我的事件可以有很多用戶,但屬於一個(管理員)

belongs_to :user 
    has_one :album 
    has_many :guests, :class_name => User 

現在,當我試圖訪問用戶創建的事件的客人

event.guests.count #Like that 

Rails返回給我一個SQL錯誤

SQLite3 :: SQLException:no such column:users.event_id:SELECT COUNT(*)FROM「users」WHERE「users」。「event_id」=?

這對我來說很奇怪,因爲用戶可以有多個事件,因此event_id列在那裏是不必要的(我的觀點)。我想我錯了,因爲如果我不是,我不會得到這個錯誤。 belongs_to和has_many之間是否存在「衝突」?

有人可以向我解釋爲什麼我得到這個以及如何解決它?

非常感謝。

回答

0

有人能向我解釋爲什麼我得到這個...

方法調用的第一部分是event.guests

你有has_many商會在Event模型建立與has_many :guests, :class_name => User

因此,積極的記錄將在您的users表中查找名爲event_id(它不存在)的列,因此th e錯誤。

...以及如何解決它?

event_id列到你的用戶表添加在您的User模型belongs_to :event一起是一種選擇,但你剛剛發現了你最好使用has_many :through方法。

0

我終於,創建了另一個模型,並使用has_many:through方法。它真的需要嗎?因爲爲關係創建一個表格似乎相當繁重。

+0

不幸的是,每當需要在關係數據庫中表示多對多關係時,您都必須創建橋表。 – sicks

0

我想你想使用has_and_belongs_to_many

has_many是一個一對多的關係。它並不關心什麼User的協會。它只是試圖查找event_id列中具有該事件ID的所有用戶,因此是您的錯誤。

但是你正在處理多對多的問題。

Full Explanation on has_and_belongs_to_many here

Also read how to pick between has_and_belongs_to vs has_many :through 基本上,使用has_and_belongs_to_many如果你不會需要使用連接模型作爲一個獨立的實體。但兩者都需要創建連接表。

0

認爲這樣:

1)用戶has_many事件和事件belongs_to用戶。因此事件表應該有一個字段user_id。這指定@ user.events將獲取用戶的所有事件,而@ event.user將獲取該事件所屬的用戶。

2)event has_many guests,class_name:'User'。在這裏,@ events.guests會獲取所有的用戶(因爲你指定了一個不同的類名,如果你還沒有指定的話,它會查找一個名爲Guest的模型和一個名爲'guests'的數據庫) 。由於guest(即用戶)是事件的子模型,因此需要存儲'event_id'以供參考。

即。一個子模型對象應該總是有一個父對象的引用(即parent_id)。

相關問題