2011-03-26 24 views
3

假設您有兩種不同類型的用戶,分別具有不同的配置文件:音樂藝術家和聽衆。每個配置文件都有一些重疊的屬性和一些不同的屬性。你應該爲每個不同的配置文件分開模型嗎?還是應該在用戶表中只有一個二進制數據列,以確定用戶是否是藝術家?這將如何構建?兩種不同的配置文件類型

回答

3

您可以使用Single Table Inheritance,這可以通過創建模型的子類來實現。

生成Profile模型與type:string柱(The name can be overriden):

$ rails g model Profile type:string 

現在,在profile.rb,子類模型:

class Profile < ActiveRecord::Base 
    # Common profile attributes 
end 

class Artist < Profile 
    # Things specific to an artist profile 
end 

class Listener < Profile 
    # Things specific to a listener profile 
end 

當您創建一個ArtistListener,它會與配置文件的類型一起保存在profiles表中。

例如,如果你做Artist.create,它將被保存在profiles表中type='Artist'

當您提取記錄時,將以適當的型號返回,如ArtistListener或通用Profile

有關此技術的更多信息,請查看this question

This blog post做了很好的解釋。

+0

Artist和Listener類都在Profile模型中?你能指點我更深入到單表繼承的任何來源嗎? – 2011-03-26 08:40:04

+0

也,我怎麼會從控制檯產生這個? – 2011-03-26 08:42:07

+0

@Justin,更新了回答。這種技術的文檔很少令人失望。 – 2011-03-26 21:50:43

0

一個默認調用具有共同的屬性和另外兩個人(藝術,監聽器)機型的每一個

的特定屬性並且在配置文件配置文件,使用字段保存類型(藝術或聽衆)

只是我的觀點。