array타입의 column에서 array로 값을 찾고 싶습니다.

조회수 1632회

아래와 같은 테이블이 있습니다.

Books Table
-----------------------
COLUMN NAME  |  TYPE
id           |  integer
name         |  character varying
subjects     |  character varying []

subjects가 {education, business, history} 이런식으로 저장되는 array 타입일때

subjects에 {history, business}가 있는지 검색하고 싶습니다.(OR조건으로요, history나 business가 둘중 하나 들어있으면 됨) array타입은 array로 어떻게 검색해야 하나요?

Book.where(subjects: ["hisotyr, business"])는 안되더라구요.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    Book.where(Book.arel_table[:subjects].overlap(['hisotyr', 'business']))
    or
    Book.where.overlap(subjects: ['hisotyr', 'business'])

    혹은

    Book.where(Book.arel_table[:subjects].contains(['hisotyr', 'business']))
    or
    Book.where.contains(subjects: ['hisotyr', 'business'])

    필요에 맞는 걸로 사용하세요. 위의 것은 sql 에서 && 고 아래것은 @> 입니다.

    • 답변감사합니다! 그런데 NoMethodError: undefined method `overlap' 으로 error가 뜨네요. 그리고 아래 contains도 같은 에러가 뜹니다. ㅠㅠ 송주연 2016.2.16 17:43

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.