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
Другие вопросы по тегам