2011-03-01 2 views
2

은 내가 필요한 것은 아마 매우 간단합니다 :레일 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 확장).

답변

2

는 MySQL의에서 어떤 논리 값이 없습니다 참조 : http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html

BOOL, BOOLEAN

이러한 유형 TINYINT의 동의어를 (1). 값 0은 거짓으로 간주됩니다. 0이 아닌 값은 true로 간주됩니다.

부울은 항상 1 또는 0으로 변환되는 작은 문자이므로, 레일스는 필드가 아닌 사실상 "필드! = 1"을 생성합니다.

postgresql을 (를) 통해 알지 못합니다.

+1

이것은 mysql 타입에 관한 것이 아니라, " IS "에 관한 것입니다. 이것은 확실히 mysql : http://dev.mysql.com/doc/refman/5.5/en/comparison-operators에 있습니다. html # operator_is-not 그렇지 않으면, 나는 진실하지 않은 부울 필드를 걸러 낼 표준 SQL 솔루션을 기꺼이 받아 들일 것입니다. 아주 간단 해 보입니다. – punund

+0

나는 당신을 조금 오해 할 수도 있습니다. mysql에서 '1'은 'true'와 동일하다. 일부 테스트 후에 나는 'field is true'가'field is 1'과'field = 1' 및'field = true'와 같은 결과를 준다는 결론에 도달했다. is not 연산자'field is not TRUE','field! = 1' 그리고'field! = true'와 동일합니다. 이 질문에 대한 대답이 있습니까? –

+0

테스트에 NULL 값이 포함되지 않았을 수 있습니다. "사실이 아님"은 "exacly가 true와 같지 않음, null 포함"을 의미하고 "! = 1"은 "1로 평가되지 않지만 null이 아닙니다"를 의미합니다. "IS [NOT]"연산자는 바이너리 로직에 대한 잘못된 인상을 주지만, 실제로는 3 진수이며, 이것이 필요한 것입니다. – punund

0

이것은 github 분기를 만들 수있는 좋은 기회입니다. 입니다.은 meta_where에 추가해야하는 기능입니다.