我正在寻找一些关于我目前在rails中实现自定义字段的计划的反馈。一般来说,我是rails和应用程序开发的新手,非常感谢有经验的人的任何评论。
应用程序:跟踪食品和饮料的品尝。
我想做的模型:
- 他们决定为他们的公司,他们想要跟踪以下属性:原产地,葡萄类型,公司,海拔,温度保持,和更多。
- 关于我的数据库所做的样本类型的唯一假设是它有一个名称。(如。
用户创建一个新的样本类型。
他们称之为:"葡萄酒"
现在已经创建了一个示例类型。
用户开始创建样品型葡萄酒的样品。
他们选择创建样品,选择葡萄酒类型。
他们必须填写的字段是他们之前指定的。
原产地:法国,葡萄类型:霞多丽等。
,
我的方法计划如下:
当用户创建样例类型时,将自定义字段存储为数组或某种字符串格式,并将其保存在名为data的列下。
SampleType
名称
葡萄酒
[origin, grape_type, company, ...]
当用户想创建一个Wine类型的示例时:我查找示例类型wine,对于数据列中的每个键,它创建表单字段。当用户提交数据时,我创建所有自定义字段名称及其相应数据的散列。我序列化它并将其存储在数据列中的散列中,如下所示:
葡萄酒
数据{ origin: "France", grape_type: "Pinot Grigio, ... }
我目前的计划是使用PostgreSQL的hstore来实现数据列的哈希。
我的问题是:- 这是我想做的一个有效的解决方案吗?
- 当用户改变他们想要的自定义字段时,我会遇到麻烦吗?
- 还有其他需要考虑的问题吗?
- mongodb和其他这样的数据库是这种类型的模型更好的选择?
我一直使用以下链接作为参考:http://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-railshttp://blog.artlogic.com/2012/09/13/custom-fields-in-rails/
和许多其他的堆栈溢出文章一样,但是似乎没有一个像我上面提到的那样使用它。
jtgi,我已经做过很多次这样的事情了,我的第一反应是,"逃跑!"根据我的经验,整个用户定义字段都是一场丑陋、粗糙的噩梦。很快,有人会问,"我可以搜索葡萄吗?"或者"我希望能够为葡萄输入多个值。"一直这样下去,你会恨自己走了这条路。: -)
那就是说,我认为你的方法是相当不错的。直接回答你的问题:是的,这是一个有效的方法
是的,当用户更改他们想要的自定义字段时,您将遇到麻烦。(见上图)
。我在看到你的第四个问题之前就已经去了。使用field => value哈希,你可以实现noSQL解决方案,但它将实现查找,搜索等。
一些想法:
我想我会将数据编组到db列中,而不是使用db函数。这样,它是纯Ruby的,而不依赖于db类型。见http://www.ruby-doc.org/core-1.9.3/Marshal.html。我现在这样做是为了在应用中缓存一些数据,这很巧妙。如果您希望存储比字符串更复杂的Ruby对象,那么无论如何都可能需要封送(l)数据。
无论如何,您可能很快就会到达那里,所以我打算在您使用它时存储一些关于属性的"元数据"。例如,"grape"是一个字符串,最大长度为20,"rating"是一个介于0到100之间的整数。这样你就可以让你的表单更漂亮一些,并做一些基本的验证。
当你讨厌这个功能的时候,你可以记住我。: -)