我认为我会利用DataMapper存储JSON对象的能力来保持我的表不错和修剪,但是文档没有说明应该如何查询JSON值。我正在为这样的篮球比赛存储分数:
{"NJN":[15,20,27,23,85],"CLE":[17,17,28,29,91]}
目前,为了找到克利夫兰骑士队的比赛,我这样做:
Game.all.reject { |g| !g.scores['CLE'] }
这非常缓慢且效率低下。 Game.all(:scores['CLE'])
会抛出NoMethodError
,那么正确的语法是什么?
答案 0 :(得分:2)
您不打算在JSON上搜索。能够在数据库中保存JSON很有用,但如果需要在其上进行搜索,则需要重新考虑您的模式。 DataMapper不是良好数据库设计的灵丹妙药;)
假设您使用JSON的原因只是方便,您应该将JSON编码的数据移动到单独的模型并使用关联映射它。您可以编写迁移以将当前存储的记录转换为新格式。
答案 1 :(得分:0)
在得分列中搜索包含字符串“CLE”的行应该有效:
Game.all :scores.like => "%CLE%"
如果您要对该信息进行大量查询,则应考虑使用规范化的数据库模式来提高性能。