在轨道/ ActiveRecord的列名中使用问号字符(Using question mark ch

2019-07-31 20:26发布

在与布尔方法使用一个问号的Ruby的成语保持(如person.is_smart? ),我想在Rails的一个ActiveRecord领域做同样的:

rails generate model Person is_smart?:boolean

我还没有实际运行上面的语句。 我假设数据库字段不能在他们一个问号。 将轨道处理这是否正确? 是最好的做法,干脆离开问号关的模式?

使用Rails 3.2.8

Answer 1:

Rails会自动生成方法smart? 如果有一场名为'smart'



Answer 2:

一个“疑难杂症”要知道,如果你碰巧使用的:enum在你的模型,因为这将值存储为整数。 由活动记录提供的问号ATTR方法希望在数据库中,以评估分别为0或1作为假/真。 例如:

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

看到这种方法是如何工作的,看到轨道源



Answer 3:

其实,我即时通讯使用Rails 4,不能没有问号叫我的布尔列

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


文章来源: Using question mark character in Rails/ActiveRecord column name