2013-11-23 55 views
1

我一直在努力與has_many:通過關係。比方說,我有如下表:ActiveRecord有很多通過

Orgs 
============== 
id  Integer 
name String 

Accounts 
============== 
id  Integer 
name String 
type Integer 
org_id Integer 

Users 
==================== 
id   Integer 
account_id Integer 
name   String 

然後我設置的模式如下:

class Orgs < ActiveRecord::Base 
    has_many :accounts 
    has_many :users, through :accounts 

class Accounts < ActiveRecord::Base 
    has_many :users 
    belongs_to :orgs 

class Users < ActiveRecord::Base 
    belongs_to :accounts 

如何獲得[機構用戶帳戶類型= 3(例如)?我在哪裏放置條件?

回答

3

我不知道,如果你想跟着這條路線,但我想你已經提出將如下的模型之間建立更好的關係:

class Orgs < ActiveRecord::Base 
    has_many :accounts 
    has_many :users, through: :accounts 

class Accounts < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :org 

class Users < ActiveRecord::Base 
    has_many :accounts 
    has_many :orgs, through: :accounts 

什麼你在上面看到的是一個典型的has_many ... through關係。現在有了上述關係,你將能夠做到以下幾點:

org = Org.find(1) 
org.users.where('accounts.account_type = :account_type', account_type: 3) 
+0

這一個適合我。謝謝。 – carbotex

0

可以使用其他範圍這種情況:

class Orgs < ActiveRecord::Base 
    has_many :accounts 
    has_many :users, through :accounts 
    has_many :specific_users, -> { where(accounts: {type: "3"}) }, through: :accounts 

你可以看到更多有關這在http://guides.rubyonrails.org/association_basics.html(4.3.3作用域爲has_many)