鉴于以下表达的关系:
class Parent < ActiveRecord::Base
has_many :children, :dependent => :destroy
accepts_nested_attributes_for :child
end
class Child < ActiveRecord::Base
belongs_to :parent
validates :name, :presence => true
end
假设我们有一个包含多个子节点的父对象,其中一个或多个具有导致parent.valid的错误?返回false。
parent = Parent.new
parent.build_child(:name => "steve")
parent.build_child()
parent.valid?
有没有办法在查看parent.errors对象时访问导致错误的子元素?
答案 0 :(得分:1)
是的,你可以做到。添加到您的Parent
模型
validates_associated :children
之后,您可以在每个父母的孩子上调用errors
方法来查找验证错误。这样的东西可以看到孩子的错误消息
parent = Parent.new
parent.build_child
parent.valid?
parent.children.first.errors.messages
答案 1 :(得分:0)
正如约翰在评论中所说,我最终忽略了为孩子们添加到父母的错误并遍历孩子并手动添加他们的错误。这个问题很复杂,因为他们有几个人:通过关系,但约翰的建议是我最终使用的本质。
答案 2 :(得分:0)
添加我的解决方案,因为我希望它有用:
class Parent < AR
has_many :children, inverse_of: :parent
validates_associated :children, message: proc { |_p, meta| children_message(meta) }
def self.children_message(meta)
meta[:value][0].errors.full_messages[0]
end
private_class_method :children_message
end
class Child < AR
belongs_to :parent, inverse_of: :children
validates :name, presence: true
end