ruby DEPRECATION声明:不推荐使用`< < `对ActiveModel::Errors消息数组进行调用以添加错误,

iyfamqjs  于 4个月前  发布在  Ruby
关注(0)|答案(3)|浏览(60)

Ruby - 2.7.3 Rails -6.1.3.2
取消预订:调用<<到ActiveModel::Errors消息数组以添加错误已被弃用。请改为调用ActiveModel::Errors#add。(从/var/home/application_name/app/models/contacts.rb:4的validate调用)

1.class AssociatedProgramValidator < ActiveModel::Validator
2.  def validate(record)
3.    unless record.user.programs.pluck(:name).include? record.program_name
4.      record.errors[:program_id] << "No #{record.program_name} found on user"
5.    end
6.  end
7.end
8.
9.class Contacts < ApplicationRecord
10.
11.  include ActiveModel::Validations
12.end

字符串
请给予一些建议。

sc4hvdpw

sc4hvdpw1#

我猜想应该是:
第一个月
https://api.rubyonrails.org/v6.1.3/classes/ActiveModel/Errors.html#method-i-add

dbf7pr2w

dbf7pr2w2#

在测试中,它看起来实际上相当于
第一个月
我怀疑使用“message”而不是使用它作为错误类型可能是一个更好的主意,但是如果不进行调整,您的代码可能无法处理这种差异。

ldfqzlk8

ldfqzlk83#

错误由Rails 6.1.And the following is taken from their comprehensive blog post on it.的lulalala从散列更改为对象

避免直接修改哈希值

在过去,您可以通过直接将消息附加到哈希来添加新的错误:

book.errors[:title] << 'is not interesting enough.'
book.errors[:title].clear

字符串
现在这也会引发一个弃用警告,因为它不再是真理的来源,而是在调用时从Error对象生成。相反,总是使用add接口或枚举方法:

book.errors.add(:title, 'is not interesting enough.')
book.errors.delete_all { |error| error.type == :too_long }


操作以下内容将不会产生任何效果:

  • 错误本身作为散列(例如:errors[:foo] = 'bar')
  • errors#messages返回的hash(例如errors.messages[:foo] = 'bar')
  • errors#details返回的哈希值(例如errors.details[:foo].clear)

相关问题