对于accepts_nested_attributes_for模型,将Rails验证消息作为JSON

时间:2013-03-08 22:32:35

标签: ruby-on-rails json validation activemodel

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我遇到同样的问题,使用Angular.js和rails ... 我认为没有更好的方法可以解决这个问题,而无需迭代嵌套模型中的所有错误。这个monkeypatch是我目前的解决方案,只适用于一对一的关系:

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