列が true、false、または NULL の可能性があるようにinstructor_performed
思われるため、次のように false または 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 を許可しません (本当にトライステート属性が必要な場合を除きます)。
ScheduledSession.where(instructor_performed: false)
SQL では NULL 値を使用したり一致"instructor_performed != true"
させたりできないため、SQL フラグメントの使用を奨励した他の回答 (現在は削除されています) は機能しないことに注意してください。ちょっと変ですが、それがルールです。代わりに、SQL は次のようにします。=
!=
SELECT * from scheduled_sessions WHERE instructor_performed IS NULL
OR instructor_performed = FALSE;
上記の Railswhere
クエリでは、2 つの値を検索していることを認識している限り、多少はわかりません。