Answers:
您可以使用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
以下对象一起使用,则存在一个错误:嵌套模型和父验证。在本主题中,您可以找到解决方案。
-------- 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
(是一个插件)验证关联:
此博客条目中的示例片段:
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在答案下方的注释中所指出的那样,validates_associated
通过运行关联的类验证来检查关联的对象是否有效。它不检查存在。同样重要的是要注意,零关联被认为是有效的。
如果要确保关联既存在又保证有效,则还需要使用
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
validates
喜欢valid: true
而不是不必validates_associated
单独致电,那不是很好。