有一个嵌套的表单,关系是这样的
class Inspection < ActiveRecord::Base
has_many :inspection_components
accepts_nested_attributes_for :inspection_components
class InspectionComponent < ActiveRecord::Base
belongs_to :inspection
我在Inspection中有一个自定义验证方法,它取决于为InspectionComponent输入的属性。如何验证 - InspectionComponent属性未在检验验证中保存或可用。
谢谢!
编辑:为了使事情更清楚,这里是我正在尝试做的一个例子。
检查具有属性状态。 InspectionComponent也具有属性状态。
检查编辑表单具有嵌套的InspectionComponents,并且可以在此表单上更新每个模型的状态。如果所有@ inspection_component.status =='complete',@ inspection.status应该只能标记为'complete'。
因此,在验证@inspection时,我必须能够看到用户为@ inspection_component.status输入的内容。
显然我可以访问控制器中两个实例的参数,但是在模型中,应该进行验证,我没有看到实现这种情况的方法。
希望这很清楚,谢谢。
答案 0 :(得分:1)
好的,如果我发布的另一个答案是新的答案对其他人有用。特别针对您的问题,我认为您需要这样的事情:
class Inspection < ActiveRecord::Base
has_many :inspection_components
accepts_nested_attributes_for :inspection_components
# we only care about validating the components being complete
# if this inspection is complete. Otherwise we don't care.
validate :all_components_complete, :if => :complete
def complete
self.status == 'complete'
end
def all_components_complete
self.inspection_components.each do |component|
# as soon as you find an incomplete component, this inspection
# is INVALID!
Errors.add("field","msg") if component.status != 'complete'
end
end
end
class InspectionComponent < ActiveRecord::Base
belongs_to :inspection
end
答案 1 :(得分:0)
您想使用validates_associated
。
可能是这样的:
validates_associated :inspection_components
搜索它并查找api。此方法也有一些有用的选项。