Реализация константы модели в виде списка или перечисления в Rails - PullRequest
0 голосов
/ 14 октября 2019

У меня есть константа модели, которая в основном представляет собой значения environments, как показано ниже:

class Account
  has_many :account_configs
  accepts_nested_attributes_for :account_configs
  ACCOUNT_ENVS = %w[development staging production].freeze
end

class AccountConfig
  validates :account, presence: true
  validates :environment, inclusion: {in: Account::ACCOUNT_ENVS}
end

Константа ACCOUNT_ENVS также используется в view. Прямо сейчас это работает хорошо для моего случая, но я должен использовать enum здесь? Если да, как я могу его использовать?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Можно выполнить следующую миграцию,

class ChangeEnvironmentOfAccountConfig < ActiveRecord::Migration
  def up
    change_column :account_configs, :environment, :integer, default: 0
  end
end

По умолчанию всегда установлено значение development.

В модели

class AccountConfig
  enum environment: %w(:development, :staging, :production)
end

config = AccountConfig.create

config.environment
# => "development"

config.production?
# => false

config.production! #updates the object

AccountConfig.development # acts as scope to filter with environment 
0 голосов
/ 14 октября 2019

Использование enum (integer) более производительно, но это означает, что другим людям / приложениям , просматривающим вашу базу данных, необходимо знать, как интерпретировать значение.

Использованиеstring менее производительно, но это означает, что другие люди / приложения могут сразу понять, что означает значение.

Насколько более производительно одно против другого? Это зависит от вашего варианта использования;здесь нет простого ответа. Вы можете попробовать сравнить его, но для большинства приложений это, скорее всего, не будет иметь большого значения.

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

Знайте плюсы и минусы обоих подходов и выберите для себя, какой из них лучше.

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