enum с целым числом для имен - PullRequest
1 голос
/ 20 мая 2019

в моей модели User Я пытаюсь объявить enum с именем, содержащим число, что-то вроде этого:

class User < ApplicationRecord
enum age_group: [
    '18_to_22',
    '23_to_27',
    '28_to_32',
    '33_to_37',
    '38_to_42'
  ]
end

но очевидно, что это вызовет проблему, когда пользовательский объект называется

ошибка:

User.18_to_22 
syntax error, unexpected tINTEGER, expecting '('
User.18_to_22

Есть ли способ обойти это, кроме использования других имен и решения проблемы со стороны внешнего интерфейса?

Ответы [ 2 ]

1 голос
/ 20 мая 2019

enum создает объемы в модели для заданных значений. И имена областей не могут начинаться с целых чисел. Таким образом, единственный обходной путь, о котором я могу подумать, это что-то вроде:

enum age_group: [
  eighteen_to_twenty: '18_to_22',
  ...
  ...
]

OR

enum age_group: [
  _18_to_20: '18_to_22',
  ...
  ...
]

Вы можете использовать его как User.eighteen_to_twenty или User._18_to_22

1 голос
/ 20 мая 2019

Вы пытаетесь использовать удобные методы, предоставляемые enum, но вам не нужно использовать эти методы. Вы можете использовать более традиционный where запрос:

User.where(age_group: '18_to_22')

Если вы предпочитаете использовать удобные методы, они по-прежнему доступны вам с помощью send, но я не думаю, что это так же ясно, как с использованием where:

User.send('18_to_22')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...