Тип данных Postgres JSON Rails

Я использую тип данных json Postgres, но хочу выполнить запрос / заказ с данными, которые вложены в json.

Я хочу заказать или запросить с .where по типу данных json. Например, я хочу запросить пользователей, у которых есть число следящих> 500, или я хочу заказать последователем или после подсчета.

Благодаря!

Пример:

model User data: { "photos"=>[ {"type"=>"facebook", "type_id"=>"facebook", "type_name"=>"Facebook", "url"=>"facebook.com"} ], "social_profiles"=>[ {"type"=>"vimeo", "type_id"=>"vimeo", "type_name"=>"Vimeo", "url"=>"http://vimeo.com/", "username"=>"v", "id"=>"1"}, {"bio"=>"I am not a person, but a series of plants", "followers"=>1500, "following"=>240, "type"=>"twitter", "type_id"=>"twitter", "type_name"=>"Twitter", "url"=>"http://www.twitter.com/", "username"=>"123", "id"=>"123"} ] } 

Для всех, кто наткнется на это. Я придумал список запросов с использованием типа данных ActiveRecord и Postgres ‘JSON. Не стесняйтесь редактировать это, чтобы сделать его более понятным.

Postgres важные команды рельсов:

 # Sort based on the Hstore data: 2.1.1 :022 > Post.order("data->'hello' DESC") => #"23", "hello"=>"22"}>, #"13", "hello"=>"21"}>, #"3", "hello"=>"2"}>, #"2", "hello"=>"1"}>]> # Where inside a JSON object: Record.where("data ->> 'likelihood' = '0.89'") # Searching nested json object: 2.1.1 :130 > r.column_data => {"data1"=>[1, 2, 3], "data2"=>"data2-3", "array"=>[{"hello"=>1}, {"hi"=>2}], "nest"=>{"nest1"=>"yes"}} 2.1.1 :130 > Record.where("column_data -> 'nest' ->> 'nest1' = 'yes' ") # Searching within array: Record.where("column_data #>> '{data1,1}' = '2' ") # Searching within a value that's an array: Record.where("column_data #> '{array,0}' ->> 'hello' = '1' ") # this only find for one element of the array. # All elements: Record.where("column_data ->> 'array' LIKE '%hello%' ") # This is advised against in rails, use below: Record.where("column_data ->> 'array' LIKE ?", "%hello%") 

Обновление. Я очень скоро напишу сообщение в блоге и поставлю ссылку здесь.

Ваш вопрос не соответствует данным, которые вы указали, но если ваша таблица называется users а data являются полем в этой таблице с JSON, например {count:123} , тогда запрос

SELECT * WHERE data->'count' > 500 FROM users

будет работать. Взгляните на схему базы данных, чтобы убедиться в том, что вы понимаете макет и убедитесь, что запрос работает, прежде чем усложнять его соглашениями Rails.

В соответствии с этим http://edgeguides.rubyonrails.org/active_record_postgresql.html#json есть разница в использовании -> и ->> :

 # db/migrate/20131220144913_create_events.rb create_table :events do |t| t.json 'payload' end # app/models/event.rb class Event < ActiveRecord::Base end # Usage Event.create(payload: { kind: "user_renamed", change: ["jack", "john"]}) event = Event.first event.payload # => {"kind"=>"user_renamed", "change"=>["jack", "john"]} ## Query based on JSON document # The -> operator returns the original JSON type (which might be an object), whereas ->> returns text Event.where("payload->>'kind' = ?", "user_renamed") 

Поэтому вы должны попробовать Record.where("data ->> 'status' = 200 ") или оператор, который подходит вашему запросу ( http://www.postgresql.org/docs/current/static/functions-json.html ) ,

  • Использование turbolinks в Rails link_to
  • Rails 4: как использовать Sass Mappings?
  • rails 4: страницы пользовательских ошибок для 404, 500 и откуда отправляется сообщение об ошибке по умолчанию 500?
  • Redis + ActionController :: Живые streamи не умирают
  • JQuery загружается только при обновлении страницы в приложении Rails 4
  • Как использовать i18n с Rails 4 enumsми
  • С Rails 4 Model.scoped устарел, но Model.all не может его заменить
  • Как интегрировать тему Wrap Bootstrap в приложение Rails?
  • GroupingError: ERROR: столбец должен отображаться в предложении GROUP BY или использоваться в агрегатной функции
  • Давайте будем гением компьютера.