2012-10-04 26 views
0

我目前正在建設一個Rails應用程序,其中一個用戶可以有很多這反過來又可以有很多項目Ruby on Rails:如何建模人員和組織?

這很有效。

現在我的問題是,有些人可能屬於同一組織,而其他人可能根本不屬於任何組織。

從我迄今爲止所瞭解到的情況來看,將所有與組織有關的信息轉移到單獨的表格/模型中將是一件好事。 (如果我錯了,請糾正我)但是如果一個人不屬於任何組織,即私人,那麼會發生什麼? 所有這些如何在Rails中建模?

感謝您的任何幫助。

回答

3

是你的問題就像你有人可能或可能不屬於一個組織。現在你將如何設置它?

現在,如您所說,您將移動組織相關數據在一個單獨的表格中說明organizations。而您的persons(或people?)應包含organization_id如果此人不屬於任何組織,那麼它將僅爲空。模型關係會有點像。

class Person < AR::Base 
    belongs_to :organization 
end 

class Organization < AR::Base 
    has_many :persons #or people? 
end 

跳過我在這裏UserProject模型的關係。請讓我知道,如果我錯過了你的問題的任何部分。


更新:根據您最後的評論
允許列表中的場景:

  1. 人員和組織都可以有地址。
  2. 如果一個人不屬於組織,那麼人可能有自己的地址。
  3. 如果他屬於一個組織,那麼他的地址實際上是該組織的地址。或者可能有自己的地址。

如果address是個人和組織重複的唯一的事情的話,最好將它在一個單獨的表addresses

組織:has_one :address
人:has_one :address


更新2:

既然事情都有點像條件

  • 如果有人屬於組織,則person.address將返回組織地址。
  • 否則person.address將返回自己的地址。

那麼我寧願用下面的方法來保持簡單。在您的Person模型中添加current_address(或任何首選名稱)方法。

def current_address 
    return organization.address if organization 
    return address 
end 

通話person.current_address代替person.address要經過的決定。

+0

好的,謝謝!這實際上是我到目前爲止所做的。我只是想知道這是否是模擬數據的好方法。我仍然有點擔心這兩張表格中的重複數量。例如。一個人會有一個地址,一個組織也會有一個地址。那麼我會在哪裏存儲這類數據? – Tintin81

+0

它是唯一的地址,還是在人員和組織中有更多的列正在重複? – Samiron

+0

我認爲如果只是地址,那麼最好將它作爲一個可以被個人或組織利用'address_id'獲得的差異資源。更新了我的答案。 – Samiron

0

嘗試這可能是它幫助你

class Person < ActiveRecord::Base 
belongs_to :organization 
end 
class Organization < ActiveRecord::Base 
has_many :persons 
end 

如果人所屬組織再組織表PERSON_ID給別人,如果人不屬於組織再組織表爲person_id是零。讓

in your console 
-> product = @product.organization 
    # if person_id given then you get result 
    # if person_id does not given then get null or blank 
+0

謝謝。你基本上和Samiron說的一樣,所以看起來我在這裏是正確的。你會建議另一個表來存儲地址數據嗎?個人和組織都需要一個地址。 – Tintin81

1

正如我瞭解的情況:

Situation

您可以用這種方式把這種情況扶手:

class Organisation < ActiveRecord::Base 
    has_many :persons 
end 

class Person < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :organisation 
end 

class User < ActiveRecord::Base 
    has_many :persons 
end 
+0

邑,你明白了吧。我桌子上的圖畫看起來是一樣的,雖然不是很整齊;-) – Tintin81

+0

兄弟。人與用戶之間的差異是什麼? – Aravin