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 中的自定义字段作为未来条目的模板的主要内容,如果未能解决你的问题,请参考以下文章

Rails:电子邮件“deliver_”方法的自定义模板?

PHP WP中的自定义字段模板 - 对应的代码段

WP中的自定义字段模板-对应的代码段

通过自定义帖子类型中的字段分配模板的过滤器或操作挂钩

Rails 中的自定义错误页面?

Sylius 中选项值中的自定义字段不可见