In keeping with Ruby's idiom of using a question mark in boolean methods (e.g. person.is_smart?
), I'd like to do the same for an ActiveRecord field in Rails:
rails generate model Person is_smart?:boolean
I haven't actually run the above statement. I assume that database fields can't have a question mark in them. Will rails deal with this appropriately? Is the best practice to simply leave question marks off of models?
Using Rails 3.2.8
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']
end
p = Person.new(mood: 'happy') # this would store mood as 0 in db
p.mood? #=> false
p.mood = 'sad' # saves as 1 in db
p.mood? #=> true
p.mood = 'bored' # saves as 2 in db
p.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
来源:https://stackoverflow.com/questions/12559142/using-question-mark-character-in-rails-activerecord-column-name