回答
通过“采取”,我假定你的意思是标题已经存在于数据库中。我进一步假设你有你的Post
模型下面一行:
validates_uniqueness_of :title
就个人而言,我认为检查,看看标题已经采取通过检查验证错误将是脆弱的。 @post.errors[:title]
将返回类似["has already been taken"]
。但是如果您决定更改错误消息或者如果您将应用程序国际化了呢?我想你会更好编写方法做测试:
class Post < ActiveRecord::Base
def title_unique?
Post.where(:title => self.title).count == 0
end
end
然后你就可以测试,如果标题是@post.title_unique?
独特。如果已经有一个Rubygem动态地将这种方法添加到ActiveRecord模型中,我不会感到惊讶。
最近我遇到了一种情况,我需要同样的事情:用户可以从一个表单中一次添加/编辑多个记录。
由于在验证时并非所有记录都已写入数据库,因此我无法使用@David的解决方案。为了使事情变得更加复杂,有可能数据库中已有的记录可能会变成重复数据,这些数据会被唯一性验证程序检测到。
TL; DR:您不能检查特定验证,但你可以检查特定错误。
我使用这个:
# The record has a duplicate value in `my_attribute`, detected by custom code.
if my_attribute_is_not_unique?
# Check if a previous uniqueness validator has already detected this:
unless @record.errors.added?(:my_attribute, :taken)
# No previous `:taken` error or at least a different text.
@record.errors.add(:my_attribute, :taken)
end
end
一些言论:
- 它的工作与的I18n,但你必须提供相同的插值参数
added?
作为一个验证程序一样。 - 如果之前的验证写了一个自定义消息,而不是默认的(
:taken
)
这个问题TLDR可以更新为包含'errors.details'这使得这成为可能。更多在http://stackoverflow.com/a/41675301/67834 –
如果您使用Rails的5+您可以使用此errors.details
不起作用。对于较早的Rails版本,使用反向移植宝石:https://github.com/cowbell/active_model-errors_details
is_duplicate_title = @post.errors.details[:title].any? do |detail|
detail[:error] == :uniqueness
end
的Rails指南: “Post.exists(:标题=> @ post.title)” http://guides.rubyonrails.org/active_record_validations.html#working-with-validation-errors-errors-details
- 1. JavaScript表单验证不检查错误
- 2. 如何检查asp.net mvc中的模型验证错误?
- 3. 检查验证与ID和指定自定义错误
- 4. 如何检查给定的字段是否导致Symfony2中的验证错误?
- 5. 检测WPF验证错误
- 6. 我如何定制rails3验证错误?
- 7. 自定义验证检查
- 8. 弹簧窗体 - 如何检查特定路径上的错误
- 9. JQuery验证器针对特定规则的特定错误的特定位置(errorPlacement不重新定位错误)
- 10. Laravel如何检查验证独特的表两场
- 11. 验证错误与验证错误
- 12. facebook错误'验证验证码错误'
- 13. 定制Spring验证错误
- 14. 检查验证过程中是否有任何错误
- 15. 如果从特定路由调用创建方法,如何检查验证?
- 16. Rails如何禁用电子邮件验证独特检查
- 17. Php检查空的textboxt帮助错误验证
- 18. 检查树枝模板中的验证错误
- 19. 如何显示ICellEditorValidator检测到的验证错误?
- 20. 如何查询javascript/jquery中特定字段的验证
- 21. 检查AJAX验证
- 22. 验证错误
- 23. 验证错误
- 24. 验证错误
- 25. 验证错误
- 26. 验证错误
- 27. 验证错误
- 28. 如何在Visual Studio 2008中禁止特定的CSS 2.0验证错误?
- 29. 如何使用Struts2验证打印特定的操作错误消息?
- 30. Symfony2验证getters错误的特定字段
嗯,我还可以使用,但我想知道是否有一种简单的方法来检测哪个验证失败。无论如何感谢 –