Перечислимый тип (также называемый «enum») — это тип данных с набором именованных элементов, каждый из которых имеет различное значение, которое, среди прочего, может использоваться в качестве констант. Перечисление может быть реализовано на разных языках и в разных средах, и в этой статье мы реализуем перечисление в приложении Ruby on Rails .
Rails, как вы, вероятно, знаете, является средой веб-приложений MVC с открытым исходным кодом. M в MVC — это ActiveRecord , который является структурой реляционного сопоставления объектов . ActiveRecord дает нам возможность представлять модели, их данные и другие операции с базами данных объектно-ориентированным способом. Перечисление обрабатывается специально в ActiveRecord и реализуется с помощью модуля ActiveRecord::Enum
.
Rails обеспечивает очень хорошее использование ActiveRecord::Enum
перечисляемым типом PostgreSQL . К сожалению, практически нет упоминаний о том, как интегрировать эти технологии. Есть даже утверждение , что в нем нет специальной поддержки перечислимых типов, хотя это возможно.
В этой статье мы рассмотрим, как использовать перечисляемые типы PostgreSQL с ActiveRecord::Enum
Эта статья состоит из 3 разделов:
- Введение в
ActiveRecord::Enum
- Введение в перечисляемые типы PostgreSQL
- Интеграция
ActiveRecord::Enum
Если вы уже знакомы с любым из вышеперечисленных, не стесняйтесь пропустить его и перейти к тому, что вам нравится.
Введение в ActiveRecord :: Enum
ActiveRecord::Enum
примечаниях к выпуску . Он предоставляет возможность управлять перечислениями, изменять их значения и сопоставлять модель с любым доступным значением перечисления. Прежде чем вы сможете использовать ActiveRecord::Enum
В этой статье будет использован следующий вариант использования ActiveRecord::Enum
Мы добавим гендерный атрибут в модель User со следующими возможными значениями:
- мужчина
- женский
- Точно сказать не могу
- Предпочитаю не разглашать
Миграция базы данных
ActiveRecord::Enum
Давайте создадим миграцию базы данных следующим образом:
bundle exec rails generate migration AddGenderToUsers gender:integer
Приведенный выше код создаст новую миграцию:
# db/migrate/20150619131527_add_gender_to_users.rb
class AddGenderToUsers < ActiveRecord::Migration
def change
add_column :users, :gender, :integer
end
end
Мы можем добавить значение по умолчанию для миграции. И чтобы повысить производительность приложения, мы также можем добавить индекс к столбцу, добавив следующий код:
# db/migrate/20150619131527_add_gender_to_users.rb
class AddGenderToUsers < ActiveRecord::Migration
def change
# add `default: 3`, and `index: true`
add_column :users, :gender, :integer, default: 0, index: true
end
end
Наконец, запустите миграцию:
bundle exec rake db:migrate
Мы закончили с миграцией базы данных. Далее нам нужно объявить ActiveRecord::Enum