2016-10-03 5 views
0

내가 equipment_id 내가 배열을 가지고있는 기록을 얻을 수있는 매치업 테이블을 검색하려고레일 포스트 그레스 배열 (<@)

배열을 저장하는 필드를 포함하는 매치업 테이블이 nil을 포함 해달라고 포함 여기에는 특정 장비 ID가 포함됩니다. 예를 들어 : 그래서 나는 실행하고 다음

search_equipment_ids = [1, 2, 3, 4, 5] 

Matchup.where("equipment_id <@ ARRAY[?]", search_equipment_ids) 

는 equipment_id 테이블 무엇에 저장되어있는 배열의 몇 가지 예입니다

[1, 2] = True 
[3, 5] = True 
[1, 2, 3] = True 
[1, 2, nil, 3] = False 

어떻게 얻을 수있는 위의 쿼리가 될 것입니다 검색은 배열에 nil이 포함될 수 있음을 무시합니다. 배열을 저장하는 방법을 변경하려고합니다. 여기에서부터 아무 값도 없을 것입니다. 그러나이 말을 고려해야합니다.

참조 : https://www.postgresql.org/docs/9.5/static/functions-array.html을 참조하십시오.

Matchups 테이블이 거대하기 때문에 장비 ID가 하나만있는 경우 많은 결과로 돌아 가기 때문에 & & 연산자를 사용하고 싶지 않습니다. 모든 equipment_ids가 포함되어있는 경우에만 반환하고 싶습니다 (닐을 제외한).

감사합니다.

답변

0

배열에서 nil 값을 제거하는 것은 어떻습니까? 간단합니다 :

Matchup.where(..., equipment_ids.compact) 
+0

죄송 합니다만, 혼동을 피하기 위해 검색 var (equipment_ids)는 nil 값을 가진 것이 아닙니다. 테이블의 equipment_id 필드는 nil 값을 보유합니다. – cal1801

+0

희망 사항으로 약간의 설명을하기 위해 질문을 수정했습니다. – cal1801

+0

각 레코드를 업데이트하고 영구히 삭제해야합니다. – tadman