Вы когда-нибудь задумывались о том, что установка значений по умолчанию для атрибутов в 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.
Если вам понравилась эта статья, рекомендуем ознакомиться с нашими последними технологическими историями и трендовыми технологическими историями.