在rails web app中,用户可以"制作"一个Document
。有不同类型的文件:
Loan
Business
Insurance
每种类型的文档都会有一些共同点,例如:account_num
,doc_id
,至少1
name
,但是他们有不同的属性。
例如:
Loan
只是带有loan_type
字段的文档
Business
个文档可以包含1+
name
个属性
如果这些文档可能包含不同数量的属性,那么它们是否需要完全独立model
,或者是否有一种方法可以为doc_type
添加Document
属性,然后显示什么,以及多少属性与Document
相关联?如果是这样,那会是什么样的?
答案 0 :(得分:1)
您所描述的是Rails中single-table inheritance的明确目的。
使用一个表格,其中包含所有模型中所有字段的超集。添加type
列,然后创建三个模型,从基础模型继承,并且您已经完成了很多工作。
答案 1 :(得分:1)
取决于您将需要什么,但一般情况下,如果您的模型具有强大的共性,该部分可以全部位于同一个表中,并包含指定类名的类型列。这称为单表继承。
模型之间的任何差异都会为您提供一些有趣的选择。如果只有一些差异,可以简单地包括列。如果有多个,或者有问题的列可能只是稀疏填充,则可以为属于其中一个模型的额外列引入新表。例如,您可以为企业提供alternate_names表。
class AlternateNames < ActiveRecord::Base
belongs_to :business
end
在不太可能的情况下,您不需要搜索额外数据,您甚至可以将其保存在同一个表中,其列名为extra_data,并序列化额外属性的哈希值。每个类都可以根据需要处理这些数据。
class Document < ActiveRecord::Base
# your code
serializes :extra_data
end
class Business < Document
def names
[name] + extra_data[:names]
end
end