Ruby on rails 我的价格应该有很多指标还是属于一个指标?

Ruby on rails 我的价格应该有很多指标还是属于一个指标?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有以下型号: class Price < ActiveRecord::Base belongs_to :product end class Metric < ActiveRecord::Base belongs_to :price belongs_to :product end 这将产生3个属性: $1.50=:每公制单位成本 2=公制单位金额 LB=:公制单位 添加新价格时的场景是您先 选择产品 给出成本价 如果是基于公制单位的价格,请填写这些属性。公制 我对这

我有以下型号:

class Price < ActiveRecord::Base 
  belongs_to :product
end

class Metric < ActiveRecord::Base
  belongs_to :price
  belongs_to :product
end
这将产生3个属性:

$1.50=:每公制单位成本 2=公制单位金额 LB=:公制单位 添加新价格时的场景是您先

选择产品 给出成本价 如果是基于公制单位的价格,请填写这些属性。公制 我对这些联系感到困惑。我知道产品可以有很多不同的指标,但这是一个:通过关联还是价格属于一个指标?现在在我的度量表中,我有产品id和价格id,但这是对的吗?我不认为一个价格可以有很多不同的衡量标准,只有一个产品可以

你会怎么安排

谢谢。

如前所述,将度量作为自己的表是一种不必要的抽象。产品和单位,你们称之为公制,我相信这是一个用词不当的东西,会让你们走上错误的道路,可以在同一张表中共存。允许单位独立于产品变化是没有意义的。每一种产品都是以一个不变的特定单位来衡量的。例如,产品A可按重量计量,产品B可按体积计量,产品C可按长度计量。允许以重量以外的任何单位灵活测量产品A是毫无意义的,事实上,具有这种灵活性可能会导致意外错误:如果单位位于单独的表中并由外键引用,则可以独立于产品进行更新,导致可能在非感官单位中可测量的类型错误

这种情况有助于确定所需的关系。找出什么保持不变,什么可以变化。在您的示例中,产品和单价之间的关系可能不同,但产品和单位度量之间的关系应该是固定的。以每单位价格记录价格,并将单位尺寸与产品一起存储。此外,我认为将价格称为单位价格——产品可以销售的计量单位价格可能更清楚

我会这样设计:

class UnitPrice < ActiveRecord::Base 
  belongs_to :product      
end

class Product < ActiveRecord::Base
  UNITS = %w(kg lbs liters gallons floz oz meters inches feet count) # add here as needed
  has_one :unit_price

  validates :unit, :inclusion => {:in => UNITS}

  def price_quote(amount)
    unit_price * amount
  end
end
通过这种方式,您还可以支持产品的多个单价,例如批量折扣、销售优惠等

顺便说一句,如果物品只是以计数而不是重量、体积等来衡量,那么单位就是计数,例如5个餐盘,你有一个1个餐盘的单价


另一方面,如果要存储价格数据,请使用整数或十进制类型。不要使用浮动。请参阅。

价格是否需要与度量相关?在我看来,一个产品似乎需要有一个特定的价格和指标,但它不需要走得更远?同意@MatthewLehner。应该像他上面说的那样简单。谢谢你的回答。我确实有问题。如果西兰花也可以分片出售呢?假设我有一片西兰花在野餐会上出售,它也在商店里以磅为单位出售,以公斤为单位批量出售。这仍然是以同样的方式处理的吗?另外,我能不能把所有这些都保留在我的价格模型中,并且仍然给我的产品模型单位?@wrbg-你可以提供不同的价格,是的,但是你仍然只有一个单位。我认为你所说的是一个不同的产品条目,例如:以磅为单位的废木材,与以计数为单位的2x4 6英尺长的木材相比。所以你可以用计数来测量大块的西兰花,用磅来测量西兰花。不同的产品可能最有意义,因为它们的处理、包装和库存也可能不同。如果你喜欢我的答案,请打旁边的接受复选标记。
class UnitPrice < ActiveRecord::Base 
  belongs_to :product      
end

class Product < ActiveRecord::Base
  UNITS = %w(kg lbs liters gallons floz oz meters inches feet count) # add here as needed
  has_one :unit_price

  validates :unit, :inclusion => {:in => UNITS}

  def price_quote(amount)
    unit_price * amount
  end
end