我有两个对象,访客和活动。参观者有多个活动。事件存储像这样的参数......
#<Event id: 5466, event_type: "Visit", visitor_token: "c26a6098-64bb-4652-9aa0-e41c214f42cb", contact_id: 657, data: {"url"=>"http://widget.powerpress.co/", "title"=>"Home (light) | Widget"}, created_at: "2015-12-17 14:51:53", updated_at: "2015-12-17 14:51:53", website_id: 2>
如您所见,有一个名为data的序列化文本列,用于存储包含更多数据的哈希值。
我需要查看一个访问者是否访问了某个页面,如果url参数是它自己的列,或者哈希是一个hstore列,那么这将非常简单,但它最初并没有这样设置它是已保存哈希的一部分。
这是我尝试过的rails查询...
visitor.events.where("data -> url = :value", value: 'http://widget.powerpress.co/')
visitor.events.where("data like ?", "{'url' => 'http://widget.powerpress.co/'}")
visitor.events.where("data -> :key LIKE :value", :key => 'url', :value => "%http://widget.powerpress.co/%")
如何正确查询postgres以查找包含具有特定值的键的哈希的对象?
答案 0 :(得分:1)
我怀疑你没找到正确的字符串。它应该是"url"=>"http://widget.powerpress.co/"
,所以:
visitor.events.where("data like ?", '%"url"=>"http://widget.powerpress.co/"%')
直接在DB中检查正确的值。
答案 1 :(得分:0)
如果要在文本列中存储哈希,请尝试以下操作:
visitor.events.select{|ve| eval(ve.data)["url"] == "http://widget.powerpress.co/"}
希望,这有帮助!
答案 2 :(得分:0)
它对我有用。
visitor.events.select { |n| n.data && n.data['url'] == "http://widget.powerpress.co/"}