我有一個與另一個模型B有「has_many」關聯的模型A.我有一個業務需求,插入到A需要至少1個關聯的記錄到B.是否有一個方法,我可以調用以確保這是真的,還是我需要編寫自定義驗證?Rails - 驗證存在的關聯?
89
A
回答
140
您可以使用validates_presence_of
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of
class A < ActiveRecord::Base
has_many :bs
validates_presence_of :bs
end
或只是validates
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates
class A < ActiveRecord::Base
has_many :bs
validates :bs, :presence => true
end
但是有它的錯誤,如果你會使用accepts_nested_attributes_for
與:allow_destroy => true
:Nested models and parent validation。在這個主題中你可以找到解決方案。
6
您可以驗證關聯與validates_existence_of
(這是一個插件):
實施例從this blog entry片段:
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :taggable, :polymorphic => true
validates_existence_of :tag, :taggable
belongs_to :user
validates_existence_of :user, :allow_nil => true
end
備選地,可以使用validates_associated
。由於Faisal notes in the comments低於答案,validates_associated
通過運行關聯的類驗證來檢查關聯的對象是否有效。它確實不是檢查存在。注意到一個無關聯被認爲是有效的也很重要。
14
--------軌道4 ------------
簡單validates
presence
工作對我來說
class Profile < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_one :profile
end
這樣,Profile.create
現在將失敗。我必須在保存profile
之前使用user.create_profile
或關聯用戶。
0
如果你想確保該組織是當前和保證是有效的,你還需要使用
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
相關問題
- 1. Rails:驗證是否存在關聯
- 2. Rails的驗證態關聯
- 3. Rails:驗證關聯並保存?
- 4. Rails 4級聯保存與驗證在belongs_to上的關聯
- 5. Rails驗證除非關聯
- 6. Rails:驗證關聯數
- 7. Rails:在has_many關聯中驗證parent_id的存在
- 8. Rails的ActiveRecord ::正確的方式來驗證存在的關聯?
- 9. Rails僅在加載時驗證關聯
- 10. 驗證互斥關聯的存在
- 11. Rails validates_presence_of並驗證has_one關聯模型中的存在
- 12. 對has_many關聯的Rails驗證
- 13. Rails關聯的自定義驗證
- 14. 驗證Rails中的關聯模型
- 15. Rails 4 ActiveRecord關聯排除驗證
- 16. Rails 5停止驗證關聯
- 17. ActiveRecord驗證:即使驗證失敗,關聯也會保存
- 18. rails activerecord保存有唯一性驗證的關聯模型
- 19. rails,如何在保存之前驗證關聯的記錄是否存在?
- 20. Rails的驗證:含蓄存在驗證
- 21. 驗證對象的關聯
- 22. 驗證ActiveRecord關聯聚合?
- 23. Rails 3:驗證關聯並向用戶顯示完美驗證
- 24. 聯盟ID的Rails驗證
- 25. factory_girl關聯驗證
- 26. 驗證asssociation Rails的存在
- 27. 驗證存在時的關聯或不存在
- 28. Jsr303上關聯的驗證
- 29. 驗證關聯對象(延遲驗證)
- 30. 驗證依賴於在Rails中構建的關聯
'的has_many:bs' lulz – Archonic 2016-10-28 00:24:37