升级到 Rails 7 后,错误 [:base] 未按预期工作

After upgrading to Rails 7, errors[:base] not working as expected

我将我的 rails 应用程序升级到 7,发现 errors[:base] 不再工作并且没有按预期进行验证。记录被保存,即使它是无效的。

下面是我的验证方法代码

def file_validation
    if well_list_file.attached?
      if well_list_file.byte_size > 1000000
        errors[:base] << I18n.t('well_list.size_limit')
      end
      if well_list_file.filename.extension_without_delimiter != 'csv'
        Rails.logger.error "in error"
        errors[:base] << I18n.t('well_list.invalid_csv')
      end
    end
  end

控制器代码如下

  def create
    @api_csv = ApiCsv.new(api_csv_params)
    respond_to do |format|
      if @api_csv.save
        format.json { render json: @api_csv, status: :created}
      else
        error_msg = @api_csv.errors.full_messages.join('<br/>')
        format.json { render json: {message: error_msg}, status: :unprocessable_entity }
      end
    end
  end

在控制台中我看到 in errorsave 成功了。

这在 rails 5.2 中有效。任何有关如何解决此问题的帮助都会很棒。谢谢。

我无法解释原因,但我自己进行了测试,我能够重现此错误,但使用:

errors.add(:base, 'foo')

而不是:

errors[:base] << 'foo'

有效并阻止保存记录。