2016-08-02 3 views
1

우선, 나는 이것이 당신의 대부분을위한 기본적인 것들이지만, 나는 여전히 배우고 있으며 어떤 도움을 주셔서 감사합니다.하위 모델의 모든 레코드가 속성 값이 같은지 쿼리하려면 어떻게해야합니까?

내 하위 테이블에 부울 열이 있습니다. 모든 자식 레코드에 대해 부울 열 값이 true인지 아닌지 확인하기 위해 부모와 연결된 모든 자식 레코드를 쿼리하려고합니다.

는 내가 지금 가지고있는 것은 이것이다 :

if Parent.children.count(:conditions => [ 'boolean_column = ?', true ]) == Parent.children.count 
    return true 

그와 나의 논리되는 모든 관련된 자식 레코드의 카운트가 부울 열이 참 관련된 자식 레코드의 수와 동일한 경우 그, 그렇다면 사실을 돌려 주어야합니다. 물론 작동하지 않습니다.

레일이 있으면이 방법은 무엇입니까?

+0

MySQL/Postgresql을 사용하는 DBMS는 무엇입니까? 레일즈 버전/ –

+0

PostgreSQL과 Rails 4.2.6을 사용하고 있습니다. – NeyLive

+0

'Children.group (: boolean_column) .where (parent_id : 12) .count (: boolean_column) [false] .blank?'시도해도 될까요? 오류가 발생하면 알려주세요 –

답변

0

당신은

Parent.children.where("boolean_column = ?", true).count == Parent.children.count 
+0

2 개의 쿼리를 수행합니다. 위와 같이 1 개의 쿼리로 작성할 수 있습니다. –

0

로 할 수있는 당신은 한 쿼리를 수행하여이 작업을 수행 할 수 있습니다. 그러나하려면 먼저 부울 열이 NULL이 아니어야하며 true 또는 false을 제외하고 먼저 확인해야합니다. 따라서 NULL이 아닌 제약 조건을 추가하면 열에 NULL이 포함되지 않습니다. 그 후 당신은 아래의 쿼리를 실행할 수 있습니다

hash = Children. 
    group(:boolean_column). 
    where(parent_id: 12). 
    count(:boolean_column) 

12는 부모의 실제 ID로 교체해야합니다. 이제 hashfalse이 있는지 확인하십시오 (예 : hash.has_key?(false)). false 키가없는 경우 모든 하위 항목에 부울 열에 true이 있다고 주장 할 수 있습니다.

관련 문제