我有一个 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/