繁体   English   中英

在Ruby on Rails中组织具有复杂对象和嵌套属性的数据库

[英]Organization of database with complex objects and nested attributes in Ruby on Rails

我最近完成了一个实质上是在线商店的应用程序。 现在,我对Ruby和Rails有了更多的了解,现在我正在尝试重构应用程序。

我的产品(笔记本电脑)具有许多属性,例如屏幕大小,处理器速度等。最初,我只是将所有属性放入一个表中,例如:

ActiveRecord::Schema.define(version: 2013121302021398) do

  create_table "products", force: true do |t|
    t.string   "brand"
    t.string   "model"
    t.string   "processor_speed"
    t.string   "screen_size"
    .....etc, etc

但是我意识到很难添加新功能/更改架构。 另外,如今,许多笔记本电脑都没有光驱,因此这是一列(在许多其他产品中)浪费了,尽管对于那些笔记本电脑,我仍然必须将其放在其中。

我想尝试通过仅具有一个称为功能的列并使其成为哈希来使其变得超级动态。 所以我可以打电话

@product.features[:screen][:size]
=> "15.6 inches"

使用method_missing来定义属性,而该产品没有即时生成的属性。 但这有点混乱,我开始寻找更简单的解决方案。

我的下一个想法是为每个功能创建一个单独的类和表,但是我觉得这也会变得很混乱。 另外,我不确定如何构建适用于此的表单。

我花了一些时间尝试权衡各种方法的优缺点,但是我想确保以最实用的方式做到这一点。

解决此问题的最常用解决方案/方法是什么?

请注意:我尝试使用features_products表建立多对多关系。 但是,尝试获取任何数据都很尴尬。

@product.features[0][:name]
=> "screen_size"
@product.features[0][:value]
=> "15.6 inch"

这就是我将不得不检索数据的方式。 我宁愿这样

@product.features.screen_size

一种解决方案是继续进行序列化功能列。 这是如何实现表单的示例: 序列化哈希字段和简单表单

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM