[Ruby on Rails]trueだとvalidation通るのにfalseだとvalidation通らない
フロントエンジニアです
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] }
を代わりに試してみる
以上です。
読んでいただき、ありがとうございます。
Author And Source
この問題について([Ruby on Rails]trueだとvalidation通るのにfalseだとvalidation通らない), 我々は、より多くの情報をここで見つけました https://qiita.com/WaiChan/items/a8f852ffe2f2e6021a91著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .