5

我正在寻找一些关于我目前在 Rails 中实施自定义字段的计划的反馈。一般来说,我是 Rails 和应用程序开发的新手,如果有经验的人提出任何意见,我将不胜感激。

背景

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

我要建模的内容:

  • 用户创建一个新的样本类型。
  • 他们称之为:“酒”
  • 他们为自己的公司做出决定,他们希望跟踪以下属性:原产地、葡萄类型、公司、海拔、保藏温度等。
  • 我的数据库对样本类型所做的唯一假设是它有一个名称。(例如咖啡、葡萄酒等)其余的都是用户指定的自定义字段。

现在已经创建了一个示例类型。

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

--

我的方法如下:

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

样品类型
名称

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

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

样品
类型
葡萄酒

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

我目前的计划是使用 PostgreSQL 的 hstore 来实现数据列中的散列。

我的问题是:

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

我一直在使用以下链接作为参考: http ://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails http://blog.artlogic .com/2012/09/13/custom-fields-in-rails/

以及许多其他堆栈溢出帖子,但是似乎没有人以我上面提到的方式使用它。

任何意见表示赞赏。

4

1 回答 1

2

jtgi,我做这种事情的次数比我想记住的要多,我的第一反应是,“逃跑!” 以我的经验,整个用户定义的字段都是丑陋的、骇人的、噩梦。很快,有人会问,“我可以搜索葡萄吗?” 或“我希望能够为葡萄输入多个值。” 不断地,你会恨自己永远走上这条路。:-)

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

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

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

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

  4. 可能。我什至在阅读您的第四个问题之前就去了那里。使用您的字段 => 值哈希,无论如何您都在实现一个 noSQL 解决方案,但实现查找、搜索等并非易事。

一些想法:

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

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

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

于 2013-01-20T19:12:54.227 回答