我正在开发一个显示产品的应用。每个产品都是一个型号(产品),有一些常见的信息,如名称,品牌等。要分开我们正在查看的产品类型,我们有 product_type (如:电话,电视,沙发)等)这基本上是一个tinyint字段(例如1 =电话,2 =电视)。
现在,取决于product_type每个产品可以有不同的选项:如果是手机产品应该有额外的信息关联(如重量,它有LTE,是否有前置摄像头等),电视应该有显示尺寸等信息。
我的问题是:根据产品类型,将此额外数据添加到产品的最佳/或/最简单的方式是什么?
我正在考虑使用额外的模型 ProductOptions ,其中包含可存储额外字段的字段product_id,option_type,option_value(VARCHAR),但我不确定这是否是性能和放大器的可选项;搜索。在这种情况下,搜索意味着找到符合给定条件的所有ProductOptions(例如po = ProductOption.where(:option_type => "LTE", :option_value => "yes")
),然后执行Product.findAllIn(po)
来查找实际产品。
或者我应该使用Postgres并使用HStore? HStore在搜索时是否有效?
有什么想法吗?
Rails新手,所有代码都是伪代码
答案 0 :(得分:2)
如果您已经在查看ProductType,可以将其设为Single-Table Inheritance并实际定义不同的产品类型。无论如何,这将更容易编码。在这种情况下:
class Product < ActiveRecord::Base
# common functionality goes here
end
class Sofa < Product
# sofa specific functionality goes here
end
然后,您可以将所有选项放在产品表中,但对不同的产品类型使用不同的attr_accessible,验证和视图。
关于此设置的最佳部分是它在rails中“正常工作”,您只需在products表上放置一个type
列。此外,它可以让你找到所有沙发:
Sofa.all
以及所有类似的事情
Product.all
就数据库性能而言,您最终会得到相当数量的空字段,但您的所有属性都是可搜索的(与序列化不同),您只需要在一个表上查询。所以,我希望这比我所知道的任何其他选项都要好。
另外,它很好,面向对象。 :)
祝你好运,欢迎来到Rails!