1

我有一个 Mongoid 模型,它有几个嵌套的子模型和集合。accepts_nested_attributes_for我使用 Rails功能从我的控制器为这些模型设置属性。

当父模型验证失败时,#errors仅包含来自父模型的错误消息,不包含任何子模型。

这通常不是问题,因为当使用常规 Rails 表单助手重新呈现表单时,通常会读取每个嵌套模型的错误消息。但是,我希望一个JSON对象中的所有错误都由 Backbone 应用程序使用。

目前,我正在遍历所有嵌套模型并手动将所有错误集合组合在一起,这很乏味,但很有效。

我错过了什么吗?有没有更简单的方法?

4

1 回答 1

1

我在使用带有rails的Angular.js时遇到了同样的问题......我认为没有更好的方法来解决这个问题而不迭代嵌套模型中的所有错误。这个猴子补丁是我目前的解决方案,只适用于一对一的关系:

module ActionController
  class Responder
    def json_resource_errors
      def get_error_recursively_from(res)
        Hash[res.errors.map do |key, value|
          if res.send(key).is_a? Mongoid::Relations
            result = get_error_recursively(res.send(key))
          else
            result = value
          end
          [key, result]
        end]
      end

      { :errors => get_error_recursively_from(resource) }
    end
  end
end
于 2013-05-18T13:11:40.547 回答