jtg*_*tgi 5 ruby-on-rails datamodel custom-fields ruby-on-rails-3 rails-activerecord
我正在寻找一些关于我目前在rails中实现自定义字段的计划的反馈.我是一般的rails和app开发新手,非常感谢更有经验的人提出的任何意见.
背景
该应用程序:跟踪食品和饮料品尝.
我正在尝试建模:
现在已经创建了一个样本类型.
-
我的方法计划如下:
当用户创建样本类型时,将自定义字段存储为数组或以某种字符串格式存储,并将其保存在名为data的列下.
SampleType
名称
wine
数据
[origin, grape_type, company, ...]
当用户想要创建Wine类型的样本时:我查找样本类型wine,对于数据列中的每个键,它会创建表单字段.当用户提交数据时,我会创建所有自定义字段名称及其相应数据的哈希值.我将它序列化并将其存储在数据列的哈希中,如下所示:
样品
类型
葡萄酒
数据
{ origin: "France", grape_type: "Pinot Grigio, ... }
我现在的计划是使用PostgreSQL的hstore在数据列中实现散列.
我的问题是:
我已经使用以下链接作为参考被: http://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails HTTP://blog.artlogic .COM/2012/09/13 /自定义字段功能于导轨/
除了许多其他堆栈溢出帖子,但似乎没有人像我上面提到的那样使用它.
任何评论都表示赞赏.
jtgi,我已经记不清做过类似的事情了,我的第一反应是“逃走!” 根据我的经验,整个用户定义字段的事情是一场丑陋、黑客的噩梦。很快,就会有人问:“我可以搜索葡萄吗?” 或“我希望能够输入葡萄的多个值。” 如此下去,你会恨自己走上这条路。:-)
也就是说,我认为你的方法相当不错。直接回答您的问题:
是的,这是一个有效的方法。
是的,当用户更改他们想要的自定义字段时,您会遇到麻烦。(往上看)
请参阅下面的一些注释。
可能。甚至在我读到你的第四个问题之前我就去了那里。无论如何,使用 field => value hash,您就实现了一个 noSQL 解决方案,但实现查找、搜索等并非易事。
一些想法:
我想我会将数据编组到数据库列中,而不是使用数据库函数。这样,它就是纯 Ruby 并且不依赖于数据库类型。请参阅http://www.ruby-doc.org/core-1.9.3/Marshal.html。我现在这样做是为了在应用程序中缓存一些数据,而且它非常流畅。如果您想最终存储比字符串更复杂的 Ruby 对象,那么您可能需要对数据进行编组(l)。
无论如何,您可能很快就会到达那里,因此我计划在您使用时存储一些有关属性的“元数据”。例如,“grape”是一个字符串,最大长度为 20,“ rating”是 0 到 100 之间的整数。这样您就可以使表单更漂亮并进行一些基本验证。
当你讨厌这个功能时,你可以想起我。:-)