은, 허위 사실 또는 NULL이 될 수 있습니다 instructor_performed
열 같은 소리, 그래서 당신은이 같은 허위 또는 NULL를 쿼리해야 사용자가 설정하려는 경우
ScheduledSession.where(instructor_performed: [false, nil])
는이 복잡성을 피할 수 데이터베이스 테이블에서 해당 열의 Null 값을 허용하지 마십시오. 당신이 마이그레이션 테이블을 만들 때이 제약 조건을 지정할 수 있습니다
add_column :scheduled_session, :instructor_performed, :boolean,
null: false, default: false
또는
create_table :scheduled_session do |t|
t.boolean :instructor_performed, null: false, default: false
...
end
또는 기존 열에 대한 제약 조건을 변경할 수 있습니다 모두에서
change_column_null :scheduled_session, :instructor_performed, false, false
위의 경우 true 또는 false 값만 허용하도록 열을 설정하고 있습니다 (및). 기본값은 false입니다. (기본값을 설정하지 않으면 기존 데이터가 위반하기 때문에 null이 아닌 제약 조건을 추가 할 수 없습니다.)
부울 열을 설정할 때 거의 항상 null을 허용하지 않습니다. SQL은 '원하기 때문에 작동하지 않습니다 "instructor_performed != true"
같은 SQL 조각의 사용을 장려 다른 답변이 (지금은 삭제 된 것으로
가
ScheduledSession.where(instructor_performed: false)
주)), 그것은 수 있기 때문에 나에게이 사실이 아니에요 모든 것을 찾을 위해 할 =
또는 !=
을 사용하여 NULL 값과 일치 시키십시오. 별난 일이지만 규칙이 있습니다. 위의 레일 where
쿼리만큼 당신은 여전히 당신이 두 값을 검색하는 것을 알고있는 한, 다소 당신에게서 숨겨
SELECT * from scheduled_sessions WHERE instructor_performed IS NULL
OR instructor_performed = FALSE;
대신 SQL은이 작업을 수행 할 수 있습니다.