2017-09-15 1 views
1

저는 Ruby on Rails와 Postgres 9.5를 사용합니다.jsonb 중첩 된 데이터 필드를 기반으로 한 모델 찾기

데이터베이스에는 events이라는 테이블이 있습니다.

데이터 필드의 특정 값을 기반으로 모든 이벤트를 찾고 싶습니다.

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

가 어떻게 데이터 => 전환 =>bacon에서 함께 이벤트를 찾을 수 쿼리를 작성 할 수 있습니다

events.data는 다음과 같은 가능한 JSON 값이?

답변

2

당신이 이런 식으로 작업을 수행 할 수 있습니다, 당신의 모델이 Event라고 가정하면 :

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

Here is jsonb operators reference.

이 쿼리 data.transition.frombacon 같다 모든 이벤트를 반환합니다.

# 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') 
관련 문제