2017-09-15 19 views
1

私はRuby on RailsとPostgres 9.5を使用します。jsonbネストされたデータフィールドに基づいてモデルを見つける

データベースには、eventsというテーブルがあります。

データフィールドの特定の値に基づいてすべてのイベントを検索したいと考えています。

{ 'transition' => { 'from' => 'bacon', 'to' => 'ham' } } 

はどうやってデータ=>トランジション=>baconからでイベントを見つけるクエリを作成することができます

events.dataは以下の可能性のJSON値を持っていますか?

答えて

2

モデルがEventと呼ばれていると仮定すると、あなたはこのようにそれを行うことができます。このクエリはdata.transition.frombaconに等しいすべてのイベントを返します

Event.where("data -> 'transition' ->> ? = ?", 'from', 'bacon') 

Here is jsonb operators reference.

クエリを乾燥させるために、あなたは例えば、リポジトリに追加することができます:あなたのモデルに含める

# app/repositories/event_repository.rb 

module EventRepository 
    extend ActiveSupport::Concern 

    included do 
    scope :where_transition, ->(field, value) { where("data -> 'transition' ->> ? = ?", field, value) } 
    end 
end 

その後:

include EventRepository 

その後、あなたはこのようにそれを使用することができます:

Event.where_transition('from', 'bacon') 
Event.where_transition('to', 'ham') 
関連する問題