2012-03-12 44 views
1

這可能是一個新手問題,但我似乎無法想到一個好的解決方案。我有一個company表,has_many users through groups也可以是公司的管理員(使他們能夠編輯公司,但每個用戶只有一家公司)。Rails「有時有一個」的關係

什麼是最好的方式來設置這在Rails中?

我不能將admin字段添加到用戶表中,因爲它不會區分他/她正在管理哪個公司。但是,如果我做了一個company_id字段,那麼這種關係在Rails中會是什麼樣子呢(因爲它是一種關係!somtimes_has_one)。我可以離開它沒有關係,但這似乎不正確...

在此先感謝您的幫助!

+0

是否每個公司有一個管理員用戶? – Becuzz 2012-03-12 21:08:24

+0

是的,每個公司都有一個管理員用戶,但它也有幾個普通用戶。那麼,有沒有辦法做一個「has_one where」類型的關係? – Justin 2012-03-12 21:10:21

+0

在這種情況下,爲什麼不在公司表上放置一個AdminUserId字段來描述哪個用戶是該公司的管理員? (我只是學習rails,所以我不確定神奇的rails語法是什麼) – Becuzz 2012-03-12 21:14:07

回答

1

據我所知,你有一個可能屬於一個公司的用戶,如果有,它實際上可能會管理它。

你可以設置Group有例如,company_iduser_idadmin場(這樣你知道哪些用戶屬於哪個公司,如果他們還管理該公司)

對於用戶屬於只有一個公司,你可以每兩列(company_iduser_id

你可以通過做

class Company < ActiveRecord::Base 
    has_many :groups 
    has_many :users, through: :groups 
    has_many :administrators, through: :groups, source: :user, conditions: ["groups.admin = ?", true] 
end 
01弄一個公司的管理員添加一個驗證的唯一性

,並呼籲所有用戶company.administratorscompany.users

你也可以做類似

class User < ActiveRecord::Base 
    has_one :group 
    has_one :company, through: :group 
    has_one :administered_company, through: :group, source: :company, conditions: ["groups.admin = ?", true] 
end 

,所以你可以調用user.companyuser.administered_company

等等...

+0

完美,謝謝!不知道has_many關係中的'source'和能否使用'conditions'! – Justin 2012-03-13 02:37:07

+0

我剛剛有一個問題。嘗試創建新公司時出現奇怪的SQL錯誤:「SQLite3 :: SQLException:no such column:users.group_id:SELECT 1 FROM」users「INNER JOIN」groups「ON」users「。」group_id 「=」groups「。」id「WHERE」groups「。」company_id「IS NULL AND」users「。」id「= 1 AND(groups.admin ='t')LIMIT 1'。你知道爲什麼這是偶然拋出嗎? – Justin 2012-03-13 21:15:18

+0

糟糕,沒關係,這是因爲我在使用CanCan,它正在尋找一些不存在的東西! – Justin 2012-03-13 21:16:37