0

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

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

  1. 仅修改 JSON 响应的错误响应
  2. 调用.full_messages所有错误
  3. 标准化键,因此errors或其他变体变得简单error

我的问题:

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

潜在项目

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

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

1 回答 1

0

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

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

RABL 中的示例代码:

object @submission

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

现在,记录 NSError *error 对象按预期在 UserInfo 字典中给出以下内容: UserInfo=0xa166bc0 {NSLocalizedRecoverySuggestion={"submission":{"fixnums":[{"photo_file_size":{"message":"Photo file size must be in介于 0 字节和 153600 字节之间"}}]}}

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

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

于 2013-05-17T16:34:18.970 回答