Как установить значения по умолчанию для атрибутов в Ruby On Rails

Вы когда-нибудь задумывались о том, что установка значений по умолчанию для атрибутов в Ruby on Rails может стать проблемой?

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

Это очень хорошая идея, если мы не хотим заполнять базу данных ненужной информацией.

Ruby on Rails предоставляет множество вариантов добавления значений по умолчанию, но не все они хороши.

Вот список хороших примеров того, как следует добавлять значения по умолчанию:

  • Вариант 1: Установить значение по умолчанию непосредственно в базе данных с помощью миграций.
  • Вариант 2: Использовать обратный вызов after_initialize.
  • Вариант 3: Использовать обратный вызов before_validate. Установите значение по умолчанию в модели, но только если оно равно nil.

Вариант 1: Установите значение по умолчанию непосредственно в базе данных с помощью миграций

В Ruby on Rails вы можете установить значения по умолчанию для атрибутов в базе данных, включив их как часть миграции.

Синтаксис: default: 'value'.

Это полезно, если вы хотите определить сразу много атрибутов, и легко увидеть значение по умолчанию при просмотре вашего файла db/schema.rb.

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name, default: "First Last", null: false
    end
  end
end
Вход в полноэкранный режим Выход из полноэкранного режима

Вариант 2: Использовать обратный вызов after_initialize.

Существует after_initialize callback, который поможет разработчику установить значения по умолчанию,
особенно если они необходимы для выполнения некоторых вычислений.

Этот обратный вызов вызывается после инициализации модели, и разработчик может получить доступ к значениям по умолчанию до ее обновления.

Например, допустим, мы хотим установить имя по умолчанию для пользователя в нашем приложении:

class User < ApplicationRecord
  after_initialize :set_defaults

  def set_defaults
    name = "First Last"
  end
end
Войти в полноэкранный режим Выйти из полноэкранного режима

Вариант 3: Используйте обратный вызов before_validate. Установите значение по умолчанию в модели, когда оно пропущено

В Ruby on Rails вы можете установить значения по умолчанию для атрибутов в модели, используя before_validation.

Это отличный способ гарантировать, что ваши модели всегда будут иметь действительные атрибуты, и сделать это очень просто:

class User < ApplicationRecord
  before_validation :set_defaults

  private

  def set_defaults
    name = "First Last" if name.blank?
  end
end
Войти в полноэкранный режим Выйти из полноэкранного режима

И это все!

Стоит отметить:

  • Не переопределяйте значениями по умолчанию оригинальные изменения, которые нарушают контракт ActiveRecord:
def set_defaults
  name = "First Last"
end
Войти в полноэкранный режим Выход из полноэкранного режима

(Это неожиданное поведение приведет разработчиков в замешательство).

  • Не устанавливайте значения по умолчанию после валидации. Предпочтительнее добавлять значения по умолчанию только перед валидацией, чтобы убедиться, что мы поддерживаем согласованность
before_save :set_defaults

private

def set_defaults
  name = nil if name.blank?
end
Вход в полноэкранный режим Выйти из полноэкранного режима

(Это добавит недопустимые данные в БД или вызовет ошибку времени выполнения)


Пол Кин — директор по технологиям в JetThoughts. Следите за ним на LinkedIn или GitHub.

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

Оцените статью
devanswers.ru
Добавить комментарий