ruby-on-rails – rails动态创建db中的表

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – rails动态创建db中的表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通常在数据库中创建/更改表我使用迁移(手动运行rake db:migrate),然后在我的代码中使用ActiveRecord.这非常酷,因为我不必担心db中数据的表示以及特定类型的db(sqlserver,pg或其他).

但是现在一个客户想要能够自己创建“东西”,就像他开始销售电脑一样,所以他想要一个界面,他可以动态地创建一个具有“名称,RAM,”等属性的对象“计算机”.高清,……“在db中使用所有这些字段创建单独的表似乎很自然.但是我怎么能在RoR中做到这一点并保留所有关于ActiveRecord的好东西?

请建议.

解决方法

通常的做法是完全相反:

>有一个对象类型的表
>为每种对象类型都有一个表名
>拥有一个非常大的表,其中包含任何类型的每个对象的所有自定义属性

这称为EAV(实体 – 属性 – 值模型,见http://en.wikipedia.org/wiki/Entity-attribute-value_model).它的规模非常糟糕.

或者,您可以使用商店文本列而不是大EAV表(请参阅http://api.rubyonrails.org/classes/ActiveRecord/Store.html),这样您就不必进行那些典型的EAV难度属性检索.您仍然需要存储“对象类型”定义的某处,因此在构建表单和表时可以使用预期的字段等.

这种方法的问题在于您无法在这些属性查询(where / join / select),因为它们不是列.有很多解决方案:

>不要对这些属性进行过滤(meh ……)>拥有一个能够进行分面搜索的外部搜索服务器>(正如@Amar所​​说)使用文档数据库>使用postgresql并使用hstore而不是简单的序列化列.

猜你在找的Ruby相关文章