2011-12-01 48 views
0

我有以下的表和字段紅寶石款,我應該選擇繼承或者只是協會

User :username,:password,:email 

Organiser :organiser_specific_fields 

Participant :participant_specific_fields 

Orgnaisers和參加者的用戶,

用戶已經存在於系統中,

當用戶組織一個Party,我創建Party類的一個實例,將他添加爲該Party的組織者並添加其他用戶作爲參與者。

如何在Rails中對此進行建模?考慮到用戶已經存在於系統中,我無法弄清楚在Rails中實現這個功能的最佳方法是什麼。

+0

組織者和參與者特定的字段是否與給定方有關? (例如「參與(是/否)」,「帶來鬆餅」,「使燒烤醬」) – Matt

+0

是的,也是一方的組織者的用戶可以是另一個的參與者 – theReverseFlick

回答

1

根據您的意見,我建議你還是堅持使用下面的模式:

  1. 用戶表,保存所有的細節有關用戶的(名字,姓氏)
  2. 當事人表的所有細節約方(時間,地點,...)
  3. 兩個連接下面列出的型號表:

這個代碼是未經測試,可能需要的名字一些調整:

class User < ActiveRecord::Base 
    has_many :parties, :through => :participations, :source => :user 
    has_many :organised, :through => :organises, :source => :user 
end 

class Party < ActiveRecord::Base 
    has_many :participants, :through => :participations 
    has_many :organizers, :through => :organises 
end 

class Participation < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :party 
    # this class represents "a user is going to a party" 
    # additional fields, which are specific to a participation go here as well 
end 

class Organises < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :party 
    # This class represents "user is the organisator of a party" 
    # additional fields, which are specific to organizing a party go here 
end 

優點:

  • 你不需要觸摸你的用戶表
  • 一方可以擁有兩個或兩個以上organisators
  • 黨的organisators可以去參加聚會,以及(希望)
  • 沒有數據複製在你的數據庫

缺點:

  • 你必須自己manange的關聯:用戶一定不要去(或者是organisator)同受一方兩次

我希望有助於澄清一些事情一點點。更多信息可以在這個link的rails文檔中找到。

0

取決於每個這些字段有多少個特定字段,以及您的用戶表與這些附加字段的外觀有多差。如果組織者和參與者不是數據庫中的獨立實體,可能是他們可能只是混入!

但一般來說,絕對可以繼承恕我直言。

+0

他們會有2特定組織者和參與者的字段。如果我需要使用STInheritance,可以將我鏈接到一個很好的頁面來了解它:-) – theReverseFlick

+0

[rails doc](http://api.rubyonrails.org/classes/ActiveRecord/Base。HTML)是非常好的。只是做一個'單表繼承'的發現.. HTH! – aishwarya