我在rails中使用表单对象模式,并生成一个数据映射,其中包含我想提交给数据库的嵌套表单对象。
例如,我有类似的内容:
所以我想做的是递归验证这些数据,但我需要从下往上开始。
换句话说,没有功能的产品无效,因此在我验证产品之前,我需要验证功能。没有键/值对的功能(例如:color = red)无效。所以我需要先验证键和值表单对象。
我想我可以将每个表单对象的状态设置为已经过验证。但是,我真的不确定如何从下到上实现这一点。
我真的没有任何值得分享的代码,因为我现在正在构建这个代码。伪代码现在也可以提供帮助,一旦我开始工作,我会发布最终结果。
答案 0 :(得分:0)
我认为你过度复杂 - 这不需要递归或自下而上。
在ProductFormObject上你可以有像
这样的东西def valid?
feature_form_objects.any? && feature_form_objects.all?(&:valid?)
end
要说必须至少有一个子对象,并且它们都必须有效。
然后FeatureFormObject上的valid?
方法只需验证其键和值是否有效? (可能首先检查它们不是零 - 取决于你如何构造事物,这可能是不可能的)。您可能还需要检查键和值的组合是否有效。
def valid?
key_form_object.valid? && value_form_object.valid?
end