# boolean validation

**URL:** <https://discuss.rubyonrails.org/t/boolean-validation/68657>\
**Category:** rubyonrails-core\
**Created:** [March 6, 2014, 4:43am UTC](https://discuss.rubyonrails.org/t/boolean-validation/68657 "2014-03-06T04:43:59Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michael\_Imstepf](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@Michael\_Imstepf](https://discuss.rubyonrails.org/u/Michael_Imstepf)\
**Post date:** [March 6, 2014, 4:43am UTC](https://discuss.rubyonrails.org/t/boolean-validation/68657/1 "2014-03-06T04:43:59Z")

</div>

I’m relatively new to Rails and was wondering what the reasoning behind the following is:

I have a boolean field processed that I want to set to false by default:

before\_validation(on: :create) do

self.processed ||= false

end

validates :processed, presence: true

This only works if I modify it to the following, which with my knowledge don’t find intuitive:

before\_validation(on: :create) do

self.processed ||= false

true

end

validates :processed, inclusion: { in: [true, false] }

Is this a design choice or is it simply too hard too implement (Object#blank etc)?

---

<div class="post-metadata">

**Author:** ![Matthew\_Lehner](https://avatars.discourse-cdn.com/v4/letter/m/ba9def/32.png) [@Matthew\_Lehner](https://discuss.rubyonrails.org/u/Matthew_Lehner)\
**Post date:** [March 6, 2014, 6:10am UTC](https://discuss.rubyonrails.org/t/boolean-validation/68657/2 "2014-03-06T06:10:21Z")

</div>

You can add the default false value to the DB column and if the value is nil, it will set it to false on save.

---

<div class="post-metadata">

**Author:** ![fxn](https://sea2.discourse-cdn.com/rubyonrails/user_avatar/discuss.rubyonrails.org/fxn/32/12956_2.png) [@fxn](https://discuss.rubyonrails.org/u/fxn)\
**Post date:** [March 6, 2014, 7:32am UTC](https://discuss.rubyonrails.org/t/boolean-validation/68657/3 "2014-03-06T07:32:07Z")

</div>

It is a design choice, see for example [Redirecting to Google Groups](https://groups.google.com/forum/#!topic/rubyonrails-core/HrxYkzUoJ34) for rationales.

---

<div class="post-metadata">

**Author:** ![Greg\_Molnar](https://sea2.discourse-cdn.com/rubyonrails/user_avatar/discuss.rubyonrails.org/greg_molnar/32/2058_2.png) [@Greg\_Molnar](https://discuss.rubyonrails.org/u/Greg_Molnar)\
**Post date:** [March 6, 2014, 11:55am UTC](https://discuss.rubyonrails.org/t/boolean-validation/68657/4 "2014-03-06T11:55:07Z")

</div>

These kinda default values are better to handled in the database IMO.

---

<div class="post-metadata">

**Author:** ![Michael\_Imstepf](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@Michael\_Imstepf](https://discuss.rubyonrails.org/u/Michael_Imstepf)\
**Post date:** [March 7, 2014, 3:44am UTC](https://discuss.rubyonrails.org/t/boolean-validation/68657/5 "2014-03-07T03:44:00Z")

</div>

Thanks everyone, I’ll then keep using the inclusion validator and only set default values in the DB.
