假设我有一个foos表,其中有一个名为“json_col”的json列......
ActiveRecord是否有办法:
Foo.create!(:json_col => { :foo => { :bar => 'baz' } }.to_json)
Foo.where_with_magical_json_finder(:bar => 'baz')
答案 0 :(得分:0)
Postgres 9.3,ActiveRecord 4
Foo.where("json_col -> 'foo' ->> 'bar' ILIKE ?", "%baz%")
这假定不区分大小写的搜索,其中任何序列都围绕着' baz'。您的pattern可能会有所不同。
获取' where_with_magical_json_finder(:bar =>' baz')'方法,在你的Foo模型中创建一个范围。
scope :magic, -> { where("json_col -> 'foo' ->> 'bar' ILIKE ?", "%baz") }
然后拨打Foo.magic