it-swarm.com.ru

Использование знака вопроса в имени столбца Rails/ActiveRecord

В соответствии с идиомой Ruby об использовании знака вопроса в логических методах (например, person.is_smart?), я хотел бы сделать то же самое для поля ActiveRecord в Rails:

Rails generate model Person is_smart?:boolean

Я на самом деле не запускал вышеупомянутое утверждение. Я предполагаю, что в полях базы данных не может быть знака вопроса. Будет ли Rails справиться с этим надлежащим образом? Является ли наилучшей практикой просто оставлять вопросительные знаки на моделях?

Использование Rails 3.2.8

32
at.

Rails автоматически сгенерирует метод smart?, если есть поле с именем 'smart'.

77
cdesrosiers

Одна «ошибка», о которой нужно знать, если вам случится использовать :enum в вашей модели, поскольку она сохраняет значение как целое число. Метод attr вопросительного знака, предоставленный активной записью, предполагает оценку 0 или 1 как false/true соответственно в базе данных. Например:

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

чтобы увидеть, как работает этот метод, смотрите Rails source

2
lacostenycoder

На самом деле, я использую 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
0
MCB