Я также видел, как люди включили это в свою миграцию, но я бы предпочел увидеть это
определено в коде модели.
Есть ли канонический способ установить значение по умолчанию для полей в
Модель ActiveRecord?
Канонический способ Rails, до Rails 5, на самом деле заключался в том, чтобы установить его при переносе, и просто искать в db/schema.rb
всякий раз, когда требуется увидеть, какие значения по умолчанию устанавливаются БД для любой модели.
Вопреки тому, что в ответе @Jeff Perrin (который немного устарел), подход к миграции будет даже применять значение по умолчанию при использовании Model.new
из-за некоторой магии Rails. Проверенная работа в Rails 4.1.16.
Самое простое - часто самое лучшее. Меньшая задолженность по знаниям и потенциальная путаница в кодовой базе. И это «просто работает».
class AddStatusToItem < ActiveRecord::Migration
def change
add_column :items, :scheduler_type, :string, { null: false, default: "hotseat" }
end
end
null: false
запрещает значения NULL в БД, и, как дополнительное преимущество, он также обновляет все существующие записи БД, для которых также установлено значение по умолчанию для этого поля. Вы можете исключить этот параметр при переносе, если хотите, но я нашел его очень удобным!
Канонический путь в Rails 5+, как сказал @Lucas Caton:
class Item < ActiveRecord::Base
attribute :scheduler_type, :string, default: 'hotseat'
end