Лучше ли устанавливать значение по умолчанию в процессе миграции или в обратном вызове? Сложно удалить (или установить другое) значение по умолчанию в процессе миграции, но в модели это еще один фрагмент кода
Значения по умолчанию для моделей в рельсах
Ответ 1
Определение параметров по умолчанию в вашей миграции также имеет некоторые недостатки. Это не будет работать, когда вы просто вызываете Model.new
.
Я предпочитаю писать обратный вызов after_initialize
, который позволяет мне устанавливать атрибуты по умолчанию:
class Model < ActiveRecord::Base
after_initialize :set_defaults, unless: :persisted?
# The set_defaults will only work if the object is new
def set_defaults
self.attribute ||= 'some value'
self.bool_field = true if self.bool_field.nil?
end
end
Ответ 2
В Rails 5 атрибут API позволяет специфицировать значения по умолчанию. Синтаксис прост и позволяет изменять значение по умолчанию без переноса.
# db/schema.rb
create_table :store_listings, force: true do |t|
t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
attribute :my_string, :string, default: "new default"
end
Ответ 3
Как правило, на бэкэнд применяются ограничения в моделях и в БД. Это похоже на проверку JS и не проверку на стороне сервера (PHP, ROR и т.д.). Кто-то может изменить ваш JS, чтобы передать проверку, и поскольку вы не подтвердили на бэкэнд, ваш сайт может быть скомпрометирован. Таким образом, проверяйте всегда в обеих сторонах, по крайней мере, если ваш сервер приложений получает компромисс, сервер БД может выставить некоторую защиту.