Rails中的自定义字段,用作将来条目的模板

jtg*_*tgi 5 ruby-on-rails datamodel custom-fields ruby-on-rails-3 rails-activerecord

我正在寻找一些关于我目前在rails中实现自定义字段的计划的反馈.我是一般的rails和app开发新手,非常感谢更有经验的人提出的任何意见.

背景

该应用程序:跟踪食品和饮料品尝.

我正在尝试建模:

  • 用户创建新的样本类型.
  • 他们称之为:"葡萄酒"
  • 他们决定他们的公司,他们想跟踪以下属性:原产地,葡萄类型,公司,海拔,温度保持等.
  • 关于我的数据库所做的样本类型的唯一假设是它有一个Name.(例如,咖啡,葡萄酒等)其余的都是用户指定的自定义字段.

现在已经创建了一个样本类型.

  • 用户开始创建样品类型葡萄酒的样品.
  • 他们选择创建样本,选择Wine类型.
  • 他们必须填写的字段是他们之前指定的字段.
  • 在Origin中他们把:法国,在葡萄类型:他们把霞多丽等.

-

我的方法计划如下:

当用户创建样本类型时,将自定义字段存储为数组或以某种字符串格式存储,并将其保存在名为data的列下.

SampleType
名称
wine

数据
[origin, grape_type, company, ...]

当用户想要创建Wine类型的样本时:我查找样本类型wine,对于数据列中的每个键,它会创建表单字段.当用户提交数据时,我会创建所有自定义字段名称及其相应数据的哈希值.我将它序列化并将其存储在数据列的哈希中,如下所示:

样品
类型
葡萄酒

数据
{ origin: "France", grape_type: "Pinot Grigio, ... }

我现在的计划是使用PostgreSQL的hstore在数据列中实现散列.

我的问题是:

  1. 这是我正在尝试做的有效解决方案吗?
  2. 当用户更改他们想要的自定义字段时,我会遇到麻烦吗?
  3. 我还应该考虑其他任何问题吗?
  4. mongodb和其他这样的db是这类模型的更好选择吗?

我已经使用以下链接作为参考被: http://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails HTTP://blog.artlogic .COM/2012/09/13 /自定义字段功能于导轨/

除了许多其他堆栈溢出帖子,但似乎没有人像我上面提到的那样使用它.

任何评论都表示赞赏.

scr*_*ier 2

jtgi,我已经记不清做过类似的事情了,我的第一反应是“逃走!” 根据我的经验,整个用户定义字段的事情是一场丑陋、黑客的噩梦。很快,就会有人问:“我可以搜索葡萄吗?” 或“我希望能够输入葡萄的多个值。” 如此下去,你会恨自己走上这条路。:-)

也就是说,我认为你的方法相当不错。直接回答您的问题:

  1. 是的,这是一个有效的方法。

  2. 是的,当用户更改他们想要的自定义字段时,您会遇到麻烦。(往上看)

  3. 请参阅下面的一些注释。

  4. 可能。甚至在我读到你的第四个问题之前我就去了那里。无论如何,使用 field => value hash,您就实现了一个 noSQL 解决方案,但实现查找、搜索等并非易事。

一些想法:

  • 我想我会将数据编组到数据库列中,而不是使用数据库函数。这样,它就是纯 Ruby 并且不依赖于数据库类型。请参阅http://www.ruby-doc.org/core-1.9.3/Marshal.html。我现在这样做是为了在应用程序中缓存一些数据,而且它非常流畅。如果您想最终存储比字符串更复杂的 Ruby 对象,那么您可能需要对数据进行编组(l)。

  • 无论如何,您可能很快就会到达那里,因此我计划在您使用时存储一些有关属性的“元数据”。例如,“grape”是一个字符串,最大长度为 20,“ rating”是 0 到 100 之间的整数。这样您就可以使表单更漂亮并进行一些基本验证。

  • 当你讨厌这个功能时,你可以想起我。:-)