2016-04-15 79 views
0

我想存储有关产品部件及其各自价格的数据。部件有不同的类别,但他们有共同的键,如:名称,:制造商,:评级,:部件编号等。什么样的结构会对这个组合更好?

作为编程的初学者,我正在努力寻找适合此的最佳设置: 1)为每个零件类别制作一个模型;或 2)用这些公共密钥制作通用零件模型,然后制作具有更多深度属性的类别模型(属于零件模型)。

那么,价格模型应该如何与其他模型相关联,取决于选择1还是选择2?

此外,如果有其他方法我想到的,请告知。编辑[1]:更具体地说,我的系统将收集价格并进行比较。这将是一种价格欺诈者,但更具体一些。所以一个产品会有很多价格。

+0

尝试阅读关于连接表和外键的更多信息。请参阅[本教程](http://www.theodinproject.com/ruby-on-rails/active-record-associations)。 –

+0

我一定会阅读更多。谢谢你的链接。 – Riggs

回答

0

没有太多的信息正是你的结构,但我可以假设,您需要根据您的描述,以获取有关polymorphic association.

+0

当我在这里发布这个问题后,我收到了一位朋友的建议,这位朋友是开发人员。似乎这就是我现在应该做的,然后继续前进。谢谢!! – Riggs

0

更多的信息,这里是我会怎样构建的初始模式:

class Product < ActiveRecord::Base 
    belongs_to :manufacturer 
    belongs_to :category 
end 

class Manufacturer < ActiveRecord::Base 
    has_many :products 
end 

class Category < ActiveRecord::Base 
    has_many :products 
end 

至于rating,您是否要创建模型取决于如何填充等级。如果评级由单一来源决定,那么我只会将其作为产品模型中的一个属性进行存储。如果评分是根据用户输入计算得出的,则可以考虑使用ratings tablebelongs_to :product

关于价格,听起来最好的办法是将价格存储在Product model。我将存储价格与8位精度和2的比例小数,可与轨道发电机rails g migration AddPriceToProducts price:decimal{8.2}或直接在这样的迁移来完成:

class AddPriceToProducts < ActiveRecord::Migration 
    def change 
    add_column :products, :price, :integer{8.2} 
    end 
end 

这将价格存储为BigDecimal,允许小数点左边的6位数字和右边的2位数字。最后,如果你的应用程序打算销售产品,我建议有一个名为InvoiceProducts或类似的表格,它可以在产品销售时存储产品价格。随着产品价格变化或产品退役,这将允许准确的长期数据。

+0

我刚刚编辑了这个问题,使其更加详细。具体来说,我的系统会收集价格并进行比较,帮助人们找到网上商店的最佳选择。价格变化记录也是需要的。这将是一种价格欺诈者,但更具体一些。所以作为一个产品会有很多价格,我认为在产品模型中放置价格属性不是一个好的选择,对吗? – Riggs

+0

是的。像产品模型中的'''rails g模型价格产品:参考''''has_many:prices'''。 – weilandia