フロントエンジニアです
apiのつなぎこみしていて、ハマったので書きます。
結論
boolean型の存在確認にpresence: trueを使うと、
trueだとvalidation通り、falseはvalidionが通らない。
具体例
こんな感じのTaskテーブルがあって、
create_table "tasks", force: :cascade do |t|
t.string "name", null: false
t.boolean "is_finished", null: false
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
こんな感じにis_finishedカラムにpresence: trueをかけているとします。
class Task < ApplicationRecord
validates :is_finished, presence: true
end
こんなサンプルデータがあって、is_finishedをfalseにしてsaveしようとするとエラリます。

解説
どうやらpresenceは、内部的にblank?メソッドを呼び出しているぽいです。
公式railsのここを見てます。間違ってたらごめんなさい。
で、blank?についてですが、Railsガイドによると、falseはblankと見なされると。
なので、falseだとblank?で引っかかって、エラっていたわけですね。
解決
prsence: trueの代わりにinclusion: { in: [true, false] }を使えば期待通りの挙動になります
まとめ
trueだと通って、falseだと通らない時、validationを確認する。
presenceが使われていたら、inclusion: { in: [true, false] }を代わりに試してみる
以上です。
読んでいただき、ありがとうございます。