Константа для значения по умолчанию в Rails-миграции - PullRequest
6 голосов
/ 24 декабря 2010

Я только начинаю с Rails и решил сделать небольшое приложение, чтобы научиться чему-то практичному.

У меня есть класс пользователя, в котором есть целочисленное поле группы пользователей. Я хочу добавить к миграции значение: по умолчанию, используя константу.

В моей пользовательской модели я определил различные группы с помощью констант, чтобы впоследствии я мог легко проверить "admin?" и т.д.

t.integer :user_group, :default => USER

Я получаю следующую ошибку на БД: migrate

грабли прерваны! Ожидается [...] / app / models / user.rb для определения USER

Однако в пользовательской модели у меня есть это:

ADMIN = 1
USER = 2

Есть идеи, что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 24 декабря 2010

Вам нужно указать имя вашего класса при ссылке на вашу константу.Если ваш класс назван User, попробуйте это:

t.integer :user_group, :default => User::USER

или

t.integer :user_group, :default => User::ADMIN
1 голос
/ 22 мая 2017

Вы не должны использовать константу в миграции, так как миграция должна представлять независимый момент времени. Миграция не должна быть связана с кодовой базой, которая может со временем меняться, поскольку миграция будет меняться в зависимости от того, когда вы ее запустите. Если вы или кто-то еще измените значение константы в базе кода (позже), это повлияет на миграцию. Возможно, нереально, что вам действительно когда-нибудь понадобится изменить постоянное значение в коде, но это всего лишь аргумент из принципа.

Если вы хотите изменить значение по умолчанию в БД в более поздний момент времени, то просто выполните новую миграцию с новым значением.

0 голосов
/ 23 июля 2012

Я думаю, вы также можете написать:

t.integer :User, :user_group, :default => ADMIN

Я не прав?

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