Hello, I am Carlos Augusto de Medeiros Filho. This is a short post on what I learned today about rails model validations. I usually write those posts to my future self and to consolidate the knowledge in my brain. I hope you find it useful.
The standard way of validating the presence
Rails give us a way to validate the presence of the model attributes.
For instance, imagine we have a User model with a column named age
. We want to raise an error every time we try to save an instance of User
in the database before sending the query.
One way to do it would be:
class User < ApplicationRecord
validates :age, presence: true
end
Rails checks the presence/absence of the property by using the #blank?
method.
However, the way this method handles boolean values may be a little bit misleading. See below:
false.blank? # => true
Solution
A possible solution would be that instead of checking the presence per se, we could check if the value is one of the values we pass in as a list, in this case [true, false]
.
Imagine that our User
has a column that defines if that user is an admin or not named is_admin
. We can check the presence, or the inclusion of the value of this property is true or false, meaning that we can't have a nil
value for is_admin
.
class User < ApplicationRecord
validates :is_admin, inclusion: { in: [ true, false ] }
end
Top comments (0)