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


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

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"])는 안되더라구요.

  • 2016년 02월 16일에 작성됨
    안드로이드, 루비온레일즈

조회수 341


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사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close