은 내가 필요한 것은 아마 매우 간단합니다 :레일 3 쿼리 "사실이 아니다"또는 meta_where
Table.where('field is not true')
하지만이이 레일 3 쿼리 인터페이스를 수행하고, 아마와 방법을 알아낼 수 없습니다 meta_where. 문제는 ": field.not_eq => nil"이 "IS NOT NULL"로 올바르게 변환되지만 ": field.not_eq => true"는 "! NOT 1 TRUE"와 분명히 같지 않은 "! = 1"이됩니다. "(MySQL 및 PostgreSQL 확장).
이것은 mysql 타입에 관한 것이 아니라, " IS "에 관한 것입니다. 이것은 확실히 mysql : http://dev.mysql.com/doc/refman/5.5/en/comparison-operators에 있습니다. html # operator_is-not 그렇지 않으면, 나는 진실하지 않은 부울 필드를 걸러 낼 표준 SQL 솔루션을 기꺼이 받아 들일 것입니다. 아주 간단 해 보입니다. –
punund
나는 당신을 조금 오해 할 수도 있습니다. mysql에서 '1'은 'true'와 동일하다. 일부 테스트 후에 나는 'field is true'가'field is 1'과'field = 1' 및'field = true'와 같은 결과를 준다는 결론에 도달했다. is not 연산자'field is not TRUE','field! = 1' 그리고'field! = true'와 동일합니다. 이 질문에 대한 대답이 있습니까? –
테스트에 NULL 값이 포함되지 않았을 수 있습니다. "사실이 아님"은 "exacly가 true와 같지 않음, null 포함"을 의미하고 "! = 1"은 "1로 평가되지 않지만 null이 아닙니다"를 의미합니다. "IS [NOT]"연산자는 바이너리 로직에 대한 잘못된 인상을 주지만, 실제로는 3 진수이며, 이것이 필요한 것입니다. – punund