2014-02-10 29 views
1

我正在嘗試爲用戶事件設置設置我的模型和控制器。這是用戶註冊事件的多對多設置。我已經創建了連接表('users_events')。如何在rails中正確搜索帶連接表的模型?

到目前爲止,我有:

型號:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :events, join_table: 'users_events' 
end 

class Event < ActiveRecord::Base 
    has_and_belongs_to_many :users, join_table: 'users_events' 
end 

我希望能夠能夠查詢的用戶簽署了所有事件。這個查詢應該去哪裏?在users_controller或events_controller?搜索/查找代碼的外觀如何?

+0

你可以簡單地做一個'User.first.events'讓所有的用戶事件,並無需定義',join_table:按照慣例「users_events''軌可以自動映射是 –

回答

0

我能弄明白。正如我在對尼古拉的答覆中闡述的那樣,我也有一個一對多的關係,因爲用戶創建的事件belongs_to(由用戶創建),所以user.events向我提供了用戶創建的事件,而不是它們是什麼主治。這是我如何解決它。

class User < ActiveRecord::Base 
    has_many :events 
    has_and_belongs_to_many :attending_events, class_name: 'Event' 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
    has_and_belongs_to_many :attendees, class_name: 'User' 
end 
1

首先user_events違背了rails慣例。 Rails的按字母順序推斷出表的名稱,以便該表應被命名爲:events_users

然後,你可以做這樣的事情:

 current_user.events 

或者

 event = Event.create!(name: "foo") 
    current_user.events << event 

另一路around..this方式您也不需要在模型中提及連接表。

+0

只是一個例子。 (如在僞代碼中)。可以執行User.first << event或user = current_user(如果通過設計或其他方式定義),然後執行user.events << event –

+0

或users = User.all; event = Event.create!(名稱:「foo」),然後是users.each do | u | u.events << event end –

+0

我想我認爲有一個事件有很多參與者正在創建,不管你是創建一個擁有多個事件的用戶,然後它對用戶來說都是唯一的:) –