我正在尝试使用与之关联的嵌套子对象集创建父对象,但是我不确定如何在对象之前访问子对象的验证方法中的父对象(其他子对象)。持续存在。简而言之,这是我的情景:
class Parent < ActiveRecord::Base
has_many :children
end
class Child < ActiveRecord::Base
belongs_to :parent
validate :siblings_validation
def siblings_validation
siblings = parent.children #parent is Nil here on create (but not on update)
# compare stuff...
end
end
使用标准的嵌套表单集创建关联,如下所示:
- form_for @parent do |f|
= f.text_field :name
- f.fields_for :children do |c|
= render :partial => "child_fields", :locals => {:f => c}
有没有办法从子对象的 siblings_validation 方法访问父级?
感谢您的回复。
答案 0 :(得分:2)
直到保存父模型,您无权访问它。当我必须验证嵌套模型时,我遇到了同样的问题。但是您可以从父级访问子模型。因此,尝试通过父模型进行验证。或者您可以创建一些attr_accessible
并在子模型中使用它以进行验证。
答案 1 :(得分:0)
如果在控制器中使用显式.build,则可以创建一个实例化但尚未保存的子对象:
def new
@parent = Parent.new
@parent.children.build
end
实例化对象应该能够引用它的父节点并检测它的兄弟节点,尽管它不会在@parent对象的.children列表中结束,直到它被保存为止。< / p>
答案 2 :(得分:0)
你到底想要验证什么?
您是否可以在自己的类中保留Parent模型的验证并在Child中使用validates_associated :parent
?