2017-02-18 94 views
1

我在我的數據庫中的以下設置。我們有用戶。每個用戶都有很多條目。用戶也屬於組織,通過名爲organization_users的表。Ruby on Rails 4 - 如何獲得一組用戶的has_many關聯?

class User < ActiveRecord::Base 
    has_many :entries 
    has_many :organization_users 
    has_many :organizations, :through => :organization_users 
end 

class Entry < ActiveRecord::Base 
    belongs_to :user 
end 

class Organization < ActiveRecord::Base 
    has_many :organization_users 
    has_many :users, :through => :organization_users 
end 

class OrganizationUser < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :organization 
end 

我的問題是:對於給定的組織,我想在該組織中的用戶的所有條目的列表。有沒有一個很好的緊湊方法來實現這一點?我知道我可以對組織中的所有用戶進行迭代並獲取條目,但我不確定是否有良好的rails-y方式來執行此操作。

回答

0

你可以做以下假設你有一個名爲organization_id一個外鍵organization_users表按你的型號

Entry.joins(:user => :organization_users).where("organization_users.organization_id = ?", org_id) 

哪裏org_id是給定組織的id。這會給你的所有用戶的所有條目在組織

+0

嘿感謝,但此查詢不更新,條目在一個組織的所有用戶列表答案的組織 – user402516

+0

@ user402516提供的所有用戶條目的列表。 – Gowtham

0

嘗試類似的東西:

my_org = Organization.find(id) 
my_org.users.eager_load(:entries) 

首先你要查詢的組織。然後通過關聯,您可以直接檢索該組織的所有用戶。最後使用eager_load,在一個查詢中獲得所有條目。結果將是一個ActiveRecord :: Relation。

+0

一旦你通過'my_org.users'檢索的所有用戶,這將無法工作,因爲,軌道返回'的ActiveRecord ::協會:: CollectionProxy'對象,而不是一個「ActiveRecord」的實例。因此,你不能在'CollectionProxy'上調用'entries'。如果檢索像這樣一個用戶你的方法只能工作:'my_org.users.first.entries' – Mark

+0

真。 1秒。我糾正了我的答案。 – devoh

+0

這看起來很有希望,但是當我跑你上面的語句,我回來的ActiveRecord :: AssociationRelation是用戶,而不是他們的條目。有什麼想法嗎? – user402516