【问题标题】:Rails validation messages as JSON for accepts_nested_attributes_for models以 JSON 格式的 Rails 验证消息,用于 accept_nested_attributes_for 模型
【发布时间】:2013-02-24 14:46:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails json validation activemodel


    【解决方案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
    

    【讨论】:

    • 似乎有一些关于通过Active Model SerializersJSON API 支持这一点的讨论,但还没有进展。我接受了你的回答,因为你用代码回答了:)
    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多