Rails Administrate устанавливает проверку присутствия по умолчанию
У меня есть интерфейс администратора с Rails Administrate
драгоценный камень.
Это становится довольно раздражающим, потому что это устанавливает проверку присутствия на belongs_to
модель.
Location.validators_on(:parent)
=> [#<ActiveRecord::Validations::PresenceValidator:0x0000000507b6b0 @attributes=[:parent], @options={:message=>:required}>, # <ActiveRecord::Validations::LengthValidator:0x0000000507a710 @attributes= [:parent], @options={:minimum=>1, :allow_blank=>true}>]
Как я могу пропустить эту проверку?
3 ответа
Начиная с Rails 5.0 belongs_to
по умолчанию required: true
Это означает, что он автоматически добавляет проверку на наличие связанного объекта. Смотрите сообщение в блоге об этом изменении.
Чтобы отключить это поведение и восстановить предыдущее поведение Rails 5.0, измените belongs_to
определение в вашей модели от
belongs_to :parent
в
belongs_to :parent, optional: true
Кажется, что Rails 5 поставляется с new_framework_defaults.rb
файл, расположенный в /config/initializers/
,
Все, что мне нужно было сделать, это установить
# Require `belongs_to` associations by default. Previous versions had false.
Rails.application.config.active_record.belongs_to_required_by_default = false
и мне было хорошо идти.
Вы можете переопределить функциональность контроллера
# app/controllers/admin/locations_controller.rb
class Admin::LocationsController < Admin::ApplicationController
# Overwrite any of the RESTful controller actions to implement custom behavior
def create
@location = Location.new(location_params)
if @location.save(false)
# do something
else
# handle error
end
end
end