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