升级到 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 error
但 save
成功了。
这在 rails 5.2
中有效。任何有关如何解决此问题的帮助都会很棒。谢谢。
我无法解释原因,但我自己进行了测试,我能够重现此错误,但使用:
errors.add(:base, 'foo')
而不是:
errors[:base] << 'foo'
有效并阻止保存记录。
我将我的 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 error
但 save
成功了。
这在 rails 5.2
中有效。任何有关如何解决此问题的帮助都会很棒。谢谢。
我无法解释原因,但我自己进行了测试,我能够重现此错误,但使用:
errors.add(:base, 'foo')
而不是:
errors[:base] << 'foo'
有效并阻止保存记录。