假设您有两种不同类型的用户具有不同的个人资料:一个用于音乐艺术家,一个用于听众。每个配置文件都有一些重叠属性和一些不同的属性。您是否应该为每个不同的配置文件分别设或者,您是否应该在用户表中使用二进制数据列来确定用户是否是艺术家?这将如何构建?
答案 0 :(得分:3)
您可以使用Single Table Inheritance
,这可以通过创建模型的子类来实现。
使用Profile
列(The name can be overriden)生成type:string
模型:
$ 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
当您创建Artist
或Listener
时,它会与个人资料的类型一起保存在profiles
表格中。
例如,如果您执行Artist.create
,则会将profiles
保存在type='Artist'
表中。
当您获取记录时,它将以适当的模型返回,无论是Artist
,Listener
还是通用Profile
。
有关此技术的更多信息,请查看this question。
This blog post也很好地解释了它。
答案 1 :(得分:0)
一个名为Profile的默认值包含公共属性,另外两个(Artistic,Listener)模型具有每个属性的特定属性
在配置文件中,使用字段保存类型(艺术或听众)
只是我的看法。