Rails 6删除特定错误-删除(:电子邮件)



我知道我可以使用user.errors.delete(: email)来删除电子邮件验证错误,但如果一封电子邮件上有多个错误,我认为它会删除与电子邮件相关的所有错误。

rails有办法删除特定的错误消息吗?我只想删除:already_confirmed错误。正在寻找类似的东西:user.errors.delete( email: :already_confirmed)

=> #<ActiveModel::Errors:0x007feee7ab60ere8
@base=
#<User id: 123, email: "some@domain.com", created_at: "2020-09-26 19:00:38", updated_at: "2020-09-26 19:01:27", first_name: nil, last_name: nil>,
@details={:email=>[{:error=>:already_confirmed}]},
@messages={:email=>["was already confirmed, please try signing in"]}>

rails中确实应该有一个user.errors.remove()方法。然而,我就是这样做的,但我仍然希望有一个更干净的方式。

error_index = user.errors.details[:email].find_index{|i| i[:error] ==  :already_confirmed}
if error_index.present?
user.errors.messages[:email].delete_at(error_index)
user.errors.details[:email].delete_at(error_index)
end

ActiveModel不支持任何删除特定错误的接口

但你可以这样做:

errors.details[:email].reject! { |detail| detail >= { error: :taken } }
errors.messages[:email].delete(t("activerecord.errors.messages.taken"))

它不是很优雅。但我还没有找到一个更漂亮的解决方案

第一行包含Hash#>=方法。如果一个散列是另一个散列的一部分,则返回true。在上面的例子中,错误散列(detail(也将具有:value密钥

第二行按内容从数组中删除元素。您需要知道错误消息。使用正确的区域设置键值

刚刚遇到这个,你可以做model.errors.clear

相关内容

  • 没有找到相关文章

最新更新