我有一个名为posts
create_table "posts", force: :cascade do |t|
t.text "values"
end
我的记录值是
#<Post id: 1, values: {"p1"=>"1", "p2"=>"xyz"}>
#<Post id: 2, values: {"p1"=>"1", "p2"=>"abc"}>
我想从values[:p2] = "abc"
答案 0 :(得分:1)
要回答您的问题,最好的办法是使用LIKE
query获取包含子字符串的列:
Posts.where("values like %\"p2\"=>\"abc\"%")
上述查询尚未经过测试,但应获取包含"p2"=>"abc"
的行。
但正如我在评论中提到的,我不推荐此解决方案。像这样配置你的表会好得多:
create_table "posts", force: :cascade do |t|
t.text "p1"
t.text "p2"
end
然后您的新查询变为
Posts.where(p2: 'abc')
这不仅更清洁,而且会更快。