3

我正在开发一个显示Products的应用程序。每个产品都是一个模型(产品),其中包含一些常见信息,如名称、品牌等。为了区分我们正在查看的产品类型,我们有一个product_type(如:电话、电视、沙发等),它基本上是一个 tinyint 字段(例如 1 = 电话,2 = 电视)。

现在,根据 product_type,每个产品可以有不同的选项:如果是手机,产品应该有相关的额外信息(比如重量,是否有 LTE,是否有前置摄像头等),电视应该有类似的信息显示尺寸等。

我的问题是:根据产品的类型,将这些额外数据添加到产品的最佳/或/最简单的方法是什么?

我正在考虑有一个额外的模型ProductOptions 字段 product_id、 option_type、option_value (VARCHAR) 将存储额外的字段,但我不确定这对于性能和搜索是否是可选的。在这种情况下,搜索意味着查找所有符合给定条件(例如po = ProductOption.where(:option_type => "LTE", :option_value => "yes"))的 ProductOptions,然后执行 aProduct.findAllIn(po)以查找实际产品。

或者我应该使用 Postgres 并使用 HStore?搜索时 HStore 效率高吗?

有任何想法吗?

Rails 新手,所有代码都是伪代码

4

1 回答 1

2

如果您已经在查看 ProductType,您可能会创建此单表继承并实际定义不同的产品类型。无论如何,这将更容易编码。在这种情况下:

class Product < ActiveRecord::Base
  # common functionality goes here
end

class Sofa < Product
  # sofa specific functionality goes here
end

然后,您可以将所有选项放在产品表上,但对于不同的产品类型有不同的 attr_accessible、验证和视图。

这个设置最好的部分是它在rails中“正常工作”,你所要做的就是type在产品表上放一列。此外,它还可以让您找到所有沙发,如下所示:

Sofa.all

所有的一切都是这样

Product.all

就数据库性能而言,您最终会得到相当多的空字段,但您的所有属性都是可搜索的(与序列化不同),您只需要在一个表上进行查询。所以,我希望这能胜过我所知道的任何其他选择。

另外,它很好而且面向对象。:)

祝你好运,欢迎来到 Rails!

于 2012-11-12T15:40:22.303 回答