試してみる
サンプル用のプロジェクトを作成する。
rails new presence_sample
cd presence_sample
サンプル用のモデルを作成する。
bin/rails g model User name:string is_admin:boolean bin/rails db:migrate
app/models/user.rb
を編集する。
class User < ApplicationRecord validates :is_admin, presence: true end
bin/rails c
でRailsコンソールを起動する。
user = User.create(name: "hoge", is_admin: false) user.errors.full_messages => ["Is admin can't be blank"]
だめだった。presence: true
だと、false
の値はエラーになってしまう。
is_adminにはfalse
の値を入れているけど、"Is admin can't be blank"
と返されてしまった。
is_admin: true
だとユーザーを作成できる。なんだこれは…。
user = User.create(name: "hoge", is_admin: true) (0.6ms) begin transaction User Create (2.8ms) INSERT INTO "users" ("name", "is_admin", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["name", "hoge"], ["is_admin", 1], ["created_at", "2019-12-02 11:02:20.604528"], ["updated_at", "2019-12-02 11:02:20.604528"]] (1.6ms) commit transaction
app/models/user.rb
を編集する。
class User < ApplicationRecord validates :is_admin, inclusion: { in: [true, false] } end
Railsコンソールでreload!
を実行して再起動する。
user = User.create(name: "hoge", is_admin: false)
これでis_adminの値がfalse
でもユーザーを作成できるようになった。
まとめ
RailsでBoolean型で入力チェックをしたい時は、以下のように設定する。
validates :is_admin, inclusion: { in: [true, false] }