ruby-on-rails-3 - 如何确定 ActiveModel::Errors 验证类型

标签 ruby-on-rails-3 validation

随着从 Rails 2 迁移到 Rails 3,验证错误已从 ActiveRecord::Error 移至 ActiveModel::Errors。
在 Rails 2 中,验证错误有一个类型和一条消息(除其他外),您可以通过执行以下操作来检查验证错误的类型:

rescue ActiveRecord::RecordInvalid => e
  e.record.errors.each do |attr, error|
    if error.type == :foo
      do_something
    end
  end
end

但是在 Rails 3 中,除了无效属性和消息之外的所有内容似乎都已丢失。因此,确定类型的唯一方法是比较错误消息:

rescue ActiveRecord::RecordInvalid => e
  e.record.errors.each do |attr, error|
    if error == "foobar"
      do_something
    end
  end
end

这根本不理想(例如,如果您有多个使用相同消息的验证怎么办?)。

问题:
Rails 3.0中有没有更好的方法来确定验证错误的类型?

最佳答案

检查是否已添加?关于 ActiveModel::错误:

https://github.com/rails/rails/blob/master/activemodel/lib/active_model/errors.rb#L331

这允许你这样做:

record.errors.added?(:field, :error)

关于ruby-on-rails-3 - 如何确定 ActiveModel::Errors 验证类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880975/

相关文章:

ruby-on-rails - has_one,:through => model VS simple method?

ruby-on-rails-3 - 如何保存 1 个对象的多个翻译而不使用 Globalize 重置 I18n.locale?

ruby - 将代码从 View 中引入 Rails 中的弹出窗口

javascript - 带前导零的整数的 Bootstrap 验证

regex - 用于国际,通用和RF3966电话号码验证的正则表达式改进?

ruby-on-rails - Rails 3 去除所有表单上的 before_validation 空格

ruby-on-rails - 按 ActiveRecord 中的特定 id 排序

ruby-on-rails-3 - 如果我想检查是否存在 2 字段组合,如何验证 Rails 3 模型中的唯一性?

javascript - 引导验证器成功后页面重定向

java - 仅当不为空或零时,如何 java bean 验证范围