Rails – validation协会的存在?
我有一个与另一个模型B有一个“has_many”关联的模型A.我有一个业务需求,插入到A需要至less有一个关联的loggingB.是否有一个方法,我可以调用,以确保这是真实的,还是我需要写一个自定义validation?
您可以使用validates_presence_of
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of
class A < AR::Base has_many :bs validates_presence_of :bs end
或者只是validates
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates
class A < AR::Base has_many :bs validates :bs, :presence => true end
但是,如果您将使用:allow_destroy => true
with :allow_destroy => true
,则存在一个错误: 嵌套模型和父validation 。 在这个主题中你可以find解决scheme。
——– 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
现在将失败。 在保存profile
之前,我必须使用user.create_profile
或者关联一个用户。
您可以validation与validates_existence_of
(这是一个插件)的关联:
此博客条目的示例片段:
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在回答下面的注释中所指出的那样,通过运行关联的类validation, validates_associated
检查关联对象是否有效。 它不检查存在。 同样重要的是要注意,无关联被认为是有效的。
如果你想确保这个关联既存在也保证有效,那么你也需要使用
class Transaction < ActiveRecord::Base belongs_to :bank validates_associated :bank validates :bank, presence: true end