それは、真、偽、または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
上の例では、真値または偽値のみを許可するように列を設定していますが、とはデフォルト値falseを使用するように指示しています。
ブール値の列を設定しているときは、ほとんどの場合nullを禁止します(ただし、真にトライステート属性を必要としない限り)。デフォルト値を設定しないと、ヌル値の制約は追加できません。 )、それは私は本当ではないすべてのものを見つけるためにこれを行うことができますので:SQLは「勝ったので"instructor_performed != true"
のようなSQLフラグメントの使用を奨励し、他の答えは(今削除)動作しないことを
ScheduledSession.where(instructor_performed: false)
は注意を=
または!=
を使用してNULL値と一致させます。奇妙なものだが、それはルールだ。上記のRails where
クエリは限り、あなたはまだあなたが二つの値を探していることを認識しているとして、多少あなたから隠し
SELECT * from scheduled_sessions WHERE instructor_performed IS NULL
OR instructor_performed = FALSE;
:代わりにSQLは、あなたがこれを行うことができます。