Rails 中的自定义字段作为未来条目的模板
Posted
技术标签:
【中文标题】Rails 中的自定义字段作为未来条目的模板【英文标题】:Custom fields in Rails that act as a template for future entries 【发布时间】:2013-01-03 12:31:21 【问题描述】:我正在寻找一些关于我目前在 Rails 中实施自定义字段的计划的反馈。总的来说,我是 Rails 和应用程序开发的新手,如果有经验丰富的人提供任何 cmets,我将不胜感激。
背景
应用程序:跟踪食品和饮料品尝。
我要建模的内容:
用户创建了一个新的样本类型。 他们称之为:“葡萄酒” 他们为自己的公司做出决定,他们希望跟踪以下属性:产地、葡萄类型、公司、海拔、保存温度等。 我的数据库对样本类型所做的唯一假设是它有一个名称。 (例如咖啡、葡萄酒等)其余的都是用户指定的自定义字段。现在已经创建了一个示例类型。
用户开始创建样品类型酒的样品。 他们选择创建样本,选择 Wine 类型。 他们必须填写的字段是他们之前指定的字段。 在原产地他们放:法国,在葡萄类型:他们放霞多丽等。--
我的方案如下:
当用户创建示例类型时,将自定义字段存储为数组或某种字符串格式,并将其保存在名为 data 的列下。
SampleType名称 酒
数据[origin, grape_type, company, ...]
当用户想要创建 Wine 类型的样本时: 我查找示例类型 wine,对于数据列中的每个键,它都会创建表单字段。 当用户提交数据时,我创建了所有自定义字段名称及其对应数据的哈希。我将其序列化并将其存储在数据列中的哈希中,如下所示:
样本类型
葡萄酒数据 origin: "France", grape_type: "Pinot Grigio, ...
我目前的计划是使用PostgreSQL的hstore来实现数据列的散列。
我的问题是:
-
对于我正在尝试做的事情,这是一个有效的解决方案吗?
当用户更改他们想要的自定义字段时,我会遇到麻烦吗?
我还应该考虑其他任何问题吗?
对于这种类型的模型,mongodb 和其他类似的 db 是更好的选择吗?
我一直使用以下链接作为参考: 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/
以及许多其他堆栈溢出帖子,但似乎没有人以我上面提到的方式使用它。
感谢任何cmets。
【问题讨论】:
【参考方案1】:jtgi,我已经做过比我想记住的次数更多的事情了,我的第一反应是,“逃跑!”以我的经验,整个用户定义的字段都是丑陋的、骇人的、噩梦。很快,有人会问,“我可以搜索葡萄吗?”或“我希望能够为葡萄输入多个值。”不断地,你会恨自己永远走上这条路。 :-)
也就是说,我认为您的方法相当不错。直接回答您的问题:
是的,这是一种有效的方法。
是的,当用户更改他们想要的自定义字段时,您会遇到麻烦。 (见上文)
请参阅下面的一些注释。
可能是。我什至在阅读您的第四个问题之前就去了那里。使用您的字段 => 值哈希,无论如何您都在实现一个 noSQL 解决方案,但实现查找、搜索等并非易事。
一些想法:
我想我会将数据编组到 db 列中,而不是使用 db 函数。这样,它就是纯 Ruby 并且不依赖于 db 类型。见http://www.ruby-doc.org/core-1.9.3/Marshal.html。我现在这样做是为了在应用程序中缓存一些数据,而且非常巧妙。如果您想最终存储比字符串更复杂的 Ruby 对象,您可能需要对数据进行编组(l)。
无论如何,您可能很快就会到达那里,因此我计划在您使用这些属性时存储一些有关属性的“元数据”。例如,“grape”是一个字符串,最大长度为 20,“rating”是 0 到 100 之间的整数。这样你可以让你的表单更漂亮一些,并进行一些基本的验证。
当你讨厌这个功能时,你可以记住我。 :-)
【讨论】:
scrozier,谢谢您的回答。我确实计划在这些字段上实施基本的分析、搜索、排序,尽管现在我对实施更加厌倦了。是不是没有什么模式可以把这种事情做好,好像CMS一直都在处理这种问题。在接受答案之前,我会将问题留待更长时间。以上是关于Rails 中的自定义字段作为未来条目的模板的主要内容,如果未能解决你的问题,请参考以下文章