0

我有一个Product模型。产品属于以下两类之一:易腐烂或不易腐烂。

易腐烂产品具有以下规格:

  • datetime : 创建日期
  • datetime : 到期日期
  • 整数:重量

不易腐烂的产品具有以下规格:

  • datetime : 创建日期
  • 字符串:品牌
  • 整数:形状

首先我想这样做:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.boolean :perishable
      t.datetime :creation_date
      t.datetime :expiration_date
      t.integer :weight
      t.string :brand
      t.integer :shape

      t.timestamps
    end
  end
end

但如果我这样做,我的数据库将有一半被 nil 填满。这是一个问题吗?我应该这样做吗?

4

2 回答 2

1

这听起来像是使用子类的绝佳机会。易腐烂和不易腐烂的物品将是从产品扩展而来的两个不同类别。

于 2013-11-06T15:10:48.023 回答
0

如果您预见到不同的产品类型越来越具有比我建议迁移到多态类型更多的独特属性,如果产品属性几乎不会发生太大变化,那么您可以保留这种方法并可选地迁移到 STI 模型方法,db列保持不变,但代码将有更好的分离。

于 2013-11-06T15:07:44.733 回答