Using question mark character in Rails/ActiveRecord column name Using question mark character in Rails/ActiveRecord column name ruby ruby

Using question mark character in Rails/ActiveRecord column name


Rails will automatically generate the method smart? if there is a field named 'smart'.


One "gotcha" to be aware of if you happen to use :enum in your model, since this stores the value as an integer. The question mark attr method provided by active record expects to evaluate 0 or 1 as false / true respectively in the database. For example:

class Person  enum mood: ['happy', 'sad', 'bored']endp = Person.new(mood: 'happy') # this would store mood as 0 in dbp.mood? #=> falsep.mood = 'sad' # saves as 1 in dbp.mood? #=> truep.mood = 'bored' # saves as 2 in dbp.mood? #=> true

to see how this method works, see rails source


Actually, Im using Rails 4 and I can't call my boolean column without the question mark

pry(main)> User.where(is_validated: false).first.is_validated  User Load (0.9ms)  SELECT "users".* FROM "users" WHERE "users"."is_validated" = 'f' ORDER BY "users"."id" ASC LIMIT 1=> nil[13] pry(main)> User.where(is_validated: false).first.is_validated?  User Load (0.8ms)  SELECT "users".* FROM "users" WHERE "users"."is_validated" = 'f' ORDER BY "users"."id" ASC LIMIT 1=> false