0

我有一个用Rails Administrategem 构建的管理界面。

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}>]

如何跳过此验证?

4

3 回答 3

1

由于 Rails 5.0belongs_to默认为required: true这意味着它会自动添加对关联对象存在的验证。请参阅有关此更改的博客文章

要禁用此行为并恢复 Rails 5.0 之前的行为belongs_to,请将模型中的定义从

belongs_to :parent

belongs_to :parent, optional: true
于 2017-01-16T11:31:08.187 回答
0

您可以覆盖控制器功能

# 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
于 2017-01-16T09:06:46.190 回答
0

似乎 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

我很高兴去。

于 2017-01-16T12:29:57.943 回答