mysql - 在 rails 中创建 "database"

标签 mysql ruby-on-rails ruby database

我有一个 Rails 4 应用程序,用户可以在其中定义一个 tools 数据库,并创建存储品牌、年份等项目的字段。然后基于这些字段在他们面前呈现一个 CRUD 界面他们定义了。

现在我有一个如下所示的数据库模型:

class Database < ActiveRecord::Base

  has_many :fields

和一个看起来像这样的字段模型:

class Field < ActiveRecord::Base
  belongs_to :database

基本上,现在在“添加字段”页面上(在您创建数据库并定义字段之后),我正在创建一个唯一 ID 并将其与该页面上的所有字段一起存储,然后我使用它将字段分组为“行”(使用 rails groupby 语句)。

我有两个问题: 1. 是实现“数据库”最有效的方式吗? 2. 我不知道如何最好地将您在创建数据库时定义的字段名称与CRUD 界面中的字段链接起来。因此,例如,如果我在最初定义所有字段时创建一个 name 字段,我如何才能将它与 CRUD 界面中的字段相关联?

感谢大家的帮助!如果我需要澄清更多,请告诉我!

最佳答案

我建议使用带有 HStore 扩展的 Postgres,因为 ActiveRecord 4 现在支持开箱即用的 hstore。

使用元数据设计来存储属性值在性能方面不是很有效,而且一旦 Rails 完成所有模型验证检查,更新就会有点慢,所以我会避免使用它来存储用户数据。

您仍然需要某种模式表来跟踪他们定义的用户属性/字段,包括他们的类型、显示名称、必需/可选等,以便您的应用程序可以正确验证输入并有足够的信息来构建查看。

但是 Postgres hstore 确实工作得很好,并且用于处理用户定义的数据。 Postgres 也支持在 hstore 列上建立索引和查询,所以它并不慢。

您的设计将需要一个schemas 表和一个rows 表。

schemas 表将包含其所属用户的列、字段名称、显示名称、类型、范围等。

rows 表将包含其所属用户的列,以及用于保存用户在其架构中定义的所有值的 values hstore 列。

有关详细信息和操作方法,只需谷歌“hstore ActiveRecord 4”即可找到很多简单的指南,因为官方文档似乎还没有跟上。

关于mysql - 在 rails 中创建 "database",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19073659/

相关文章:

php - 获取数据时获取非法字符串偏移量警告

ruby-on-rails - Ruby IDE : any worth looking at?

ruby-on-rails - Rails 4 搜索绑定(bind)变量数量错误的单独关键字(1 对 2)

ruby-on-rails - Multi-Tenancy Rails 应用程序中租户的自定义 View 和 Assets ?

ruby-on-rails - 将变量插入路线 - map.resources :posts, :as => X - is this possible?

ruby-on-rails - 在 Rails Controller 中,在 'map.do' 循环中创建新索引失败,但在 Ruby 中没问题

ruby - 如何使用 DataMapper 聚合避免 N + 1

mysql - MySQL 数据库中可搜索的用户名列使用什么数据类型和索引?

php - pdo 查询仅在第一次有效

mysql - 为什么 MySQL 完全重新格式化 VIEW 查询文本?