回答
通過「採取」,我假定你的意思是標題已經存在於數據庫中。我進一步假設你有你的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錯誤的特定字段
嗯,我還可以使用,但我想知道是否有一種簡單的方法來檢測哪個驗證失敗。無論如何感謝 –