我有一个Mongoid模型,它有几个嵌套的子模型和集合。我使用Rails accepts_nested_attributes_for
功能为我们的控制器设置了这些模型的属性。
当父模型验证失败时,#errors
仅包含来自父模型的错误消息,而不包含任何子模型。
这通常不是问题,因为当使用常规Rails表单帮助程序重新呈现表单时,通常会读取每个嵌套模型的错误消息。但是,我希望一个JSON
对象中的所有错误都可供Backbone应用程序使用。
目前,我正在遍历所有嵌套模型并手动将所有错误集合整合在一起,这很乏味,但仍有效。
我错过了什么吗?有更简单的方法吗?
答案 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