use*_*461 5 ruby mysql postgresql hash ruby-on-rails
我有两个对象,访客和活动.参观者有多个活动.一个事件存储这样的参数......
#<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>
Run Code Online (Sandbox Code Playgroud)
如您所见,有一个名为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/%")
Run Code Online (Sandbox Code Playgroud)
如何正确查询postgres以查找具有包含具有特定值的键的哈希的对象?
我怀疑你没有在寻找正确的字符串。应该是"url"=>"http://widget.powerpress.co/"这样,所以:
visitor.events.where("data like ?", '%"url"=>"http://widget.powerpress.co/"%')
Run Code Online (Sandbox Code Playgroud)
直接在数据库中检查正确的值。