如何在rails / ruby​​中构建这个递归方法?

时间:2015-07-14 05:51:32

标签: ruby-on-rails ruby recursion

我在rails中使用表单对象模式,并生成一个数据映射,其中包含我想提交给数据库的嵌套表单对象。

例如,我有类似的内容:

  • ProductFormObject
    • FeatureFormObject1
      • KeyFormObject(例如:颜色)
      • ValueFormObject(例如:红色)
    • FeatureFormObject2
      • KeyFormObject(例如:大小)
      • ValueFormObject(例如:大)

所以我想做的是递归验证这些数据,但我需要从下往上开始。

换句话说,没有功能的产品无效,因此在我验证产品之前,我需要验证功能。没有键/值对的功能(例如:color = red)无效。所以我需要先验证键和值表单对象。

我想我可以将每个表单对象的状态设置为已经过验证。但是,我真的不确定如何从下到上实现这一点。

我真的没有任何值得分享的代码,因为我现在正在构建这个代码。伪代码现在也可以提供帮助,一旦我开始工作,我会发布最终结果。

1 个答案:

答案 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