所有JSON响应的连锁错误消息

时间:2012-09-14 08:29:41

标签: ruby-on-rails-3 json api

我有一个包含HTML和JSON端点的Rails应用程序,并且iOS应用程序正在使用JSON。 iOS开发人员希望将所有错误消息输出从{"errors":{"email":["has already been taken"],"password":["is too short (minimum is 6 characters)"]}}更改为{ "error" : "message"}形式,但似乎没有一个好地方可以执行单个修复/格式化。

我的感觉是这里有3个不同的步骤:

  1. 仅修改JSON响应的错误响应
  2. 在所有错误上调用.full_messages
  3. 标准化密钥,以便errors或其他变体变为error
  4. 我的问题:

    1. 是否有地方可以为所有JSON消息设置错误格式为full_messages,还是需要将其拼接到所有错误调用中?
    2. 是否有标准化所有错误的密钥的地方?
      • 我想我可以在as_json中重新开启ActiveRecord::Base,但可能还有其他错误来自AR ......
    3. 潜在项目

      这些是迄今为止提到的潜在解决方案。

      1. 主持人
        • 这对于聚合来自多个模型的信息似乎很有用,但仍然要求在每个方法中调用新的类。
        • 我希望有一个更高级别的解决方案能够在传输之前捕获输出并重新格式化,而无需在整个应用程序中手动插入它。

1 个答案:

答案 0 :(得分:0)

可能迟到的答案,但如果它有助于增加更多的视角。

我使用RABL作为json表示层,并尝试使用它来向ios输出json错误。

RABL中的示例代码:

object @submission

child :errors do |e|
  e.full_messages.each do |message|
   node(:message){message}
  end
 end

现在,记录NSError *错误对象会在UserInfo字典中按预期方式提供以下内容: UserInfo = 0xa166bc0 {NSLocalizedRecoverySuggestion = {“submission”:{“fixnums”:[{“photo_file_size”:{“message”:“照片文件大小必须介于0字节和153600字节之间}}}}}

可以注意到UserInfo字典的值不返回ios字典友好格式。 '='代替':',数组有'['而不是'('和')'

是否建议的解决方案可能为NSString添加一个类别,用NSDictionary友好的文本格式替换返回对象中的所有这些非字典元素,然后转换为ios NSDictionary并使用标准对象访问方法?我想知道这是正确的方法,还是有更好,更优雅的方式?谢谢。