问题
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
回答1:
Rails will automatically generate the method smart?
if there is a field named 'smart'
.
回答2:
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
回答3:
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