所以我有这个带有嵌套字段的模型Foo,
<id: 1, name: "blah", condition: "{\"condition_type\":\"BAR\",\"number\":\"1\""\}">
我想获得条件类型为Bar的Foos列表。 我试过了
JSON.parse(Foo.select(:condition)).where({"condition_type"=>"BAR"})
但不起作用。我将不胜感激任何帮助!
答案 0 :(得分:1)
你的JSON中有一个轻微的语法错误(我认为最后有一个额外的引用,但是在JSON.parse(Foo.select(:condition))
结束时你现在正在使用JSON对象(我认为你&# 39;重新意识到。如果你要说:
JSON.parse(Foo.select(:condition)).class
你会得到一个哈希值。
[12] pry(main)> json
=> {"condition_type"=>"BAR", "number"=>"1"}
[13] pry(main)> json.class
=> Hash
总而言之,您可以在Enumerable#keep_if
上使用hash
这样的[26] pry(main)> json = JSON.parse(condition)
=> {"condition_type"=>"BAR", "number"=>"1"}
[27] pry(main)> json.keep_if { |k, v| k == "condition_type" && v == "BAR" }
=> {"condition_type"=>"BAR"}
方法:
JSON.parse(Foo.select(:condition)).keep_if { |k, v| k == "condition_type" && v == "BAR" }
组合方法如下所示:
{{1}}