2013-02-03 39 views
1

用戶/客戶模式,我有AccountUser一個簡單的設置:設計與業主

class Account < ActiveRecord::Base 
    has_many :users 
end 

accounts 
-------- 
id 
name 
... 

class User < ActiveRecord::Base 
    belongs_to :account 
end 

users 
----- 
id 
account_id 
username 
... 

現在,我該如何設計出一個Account有一個「老闆」(即在帳戶擁有完全權限的用戶)。我能想到的選項:

  1. 在用戶上添加一個布爾字段,調用account_owner? (對我不舒服)
  2. accounts表上添加一個字段,名爲user_id,從而造成一種雞與雞的問題。
  3. 還有別的嗎?角色?

回答

1

會這樣的工作?您需要爲Account添加一個owner_id外鍵。

class Account < ActiveRecord::Base 
    belongs_to :owner, class_name: "User" 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :account 
end 

# Somewhere in your code... 

account = Account.create(name: "Account 1") 
owner = User.create(username: "tom") 

account.users << owner 
account.users << User.create(username: "sarah") 
account.owner = owner 
account.save 
+0

是的,我已經想到了這一點 - 它是選項#2以上(雖然不是顯示belongs_to的調用) – Zabba

+0

是啊,我不明白爲什麼有一個雞和蛋的問題雖然。你可以解釋嗎? –

+0

事實上,如果我要這樣做,「正確」的方式,即每個帳戶*必須*擁有一個所有者和每個用戶*必須*屬於一個帳戶,那麼相應的'user_id'和'account_id'不能爲NULL在數據庫級約束中,因此兩者都不能被創建,因爲一個是另一個需要的。但是如果我使用這種方法,並且不需要'user_id'的非NULL值,它會簡化事情。我可能會過度考慮這一點。分析癱瘓! – Zabba

0

如果可能有一個帳戶可以有多個所有者,您可以添加一個角色列給用戶。

@user.account == @account && @user.role == 'admin'