gpt4 book ai didi

ruby-on-rails - Rails动态在数据库中创建表

转载 作者:行者123 更新时间:2023-12-02 17:40:23 24 4
gpt4 key购买 nike

通常,要在数据库中创建/更改表,我会使用迁移(手动运行rake db:migrate),然后在我的代码中使用 ActiveRecord。这非常酷,因为我不必担心数据库中数据的表示以及特定类型的数据库(sqlserver、pg 或其他)。

但是现在,客户希望能够自己即时创建“东西”,例如,他开始销售计算机,因此他想要一个界面,可以在其中动态创建具有“名称”等属性的对象“计算机” 、内存、高清……”。在数据库中创建包含所有这些字段的单独表似乎是很自然的。但是我怎样才能在 RoR 中做到这一点并保留 ActiveRecord 的所有这些优点呢?

请提出建议。

最佳答案

通常的方法是做相反的事情:

  • 有一个对象类型表
  • 为每种对象类型提供一个字段名称表
  • 有一个非常大的表,其中包含任何类型的每个对象的所有自定义属性

这称为 EAV(实体属性值模型,请参阅 http://en.wikipedia.org/wiki/Entity-attribute-value_model )。而且它的扩展性非常糟糕。

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

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

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

关于ruby-on-rails - Rails动态在数据库中创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com