Rails - 验证关联的存在?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails - 验证关联的存在?相关的知识,希望对你有一定的参考价值。
我有一个模型A与另一个模型B有一个“has_many”关联。我有一个业务要求,插入A需要至少1个相关记录到B.是否有一个方法我可以调用以确保这是真的,或者我是否需要编写自定义验证?
你可以使用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一起使用,那就有一个错误。在本主题中,您可以找到解决方案。
-------- Rails 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
现在将失败。在保存user.create_profile
之前,我必须使用profile
或关联用户。
您可以验证与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
通过运行相关的类验证来检查关联对象是否有效。它不会检查是否存在。值得注意的是,nil关联被认为是有效的。
如果要确保关联存在且保证有效,则还需要使用
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
以上是关于Rails - 验证关联的存在?的主要内容,如果未能解决你的问题,请参考以下文章