Rails 有什么办法可以在 jbuilder 之后再做一次对内容的处理?

wfwdex · 2016年09月08日 · 最后由 lithium4010 回复于 2016年09月08日 · 1681 次阅读

事情是这样的,项目提供 api,我使用 jbuilder 呈现 json 数据,但在呈现给客户端之前,需要做一次对称加密。

比如原来是这样:

{
    "success": true,
    "messages": [],
    "menu": {
        "id": "file", 
        "value": "File", 
        "popup": {
            "value": "New", 
            "onclick": "CreateNewDoc()"
        }
    }
}

最终经过再处理,呈现的效果可能是这样:

{
    "success": true,
    "messages": [],
    "data": "ewogICAgImCAgIm9uY2xpYXlhbcg55SxIOW8gOa6kOS4reWbvSDmiYDmnIkgfCBA5paw5rWq5b6u5Y2aIHzpmL/ph4zkupHmj5DkvpvmnI3liqHlmajlkozluKblrr0gfOaEj+ingeWPjemmiCB8IOeypElDUOWkhzEyMDA5NDgz5Y+3LTUgfA=="
}

有没有这样做过的同学?或者比较可行的思路?

有多个 obj 怎么保证哪个应该加密哪个不加?签名算法岂不是更好?

搞定了,我先使用 render_to_string 方法把需要呈现的数据组织成 json 字符串

# action: index
rendered_string = render_to_string(
  template: "__index", 
  locals: { menu: menu }, 
  layout: false
)
# __index.json.jbuilder
json.menu menu

然后再通过自定义的加密方法把 rendered_string 加密一下赋值给 @data 然后才再在这个 action 对应的 jbuilder 模版 (index.json.jbuilder) 中呈现最终的 json

# index.json.jbuilder
json.data @data
需要 登录 后方可回复, 如果你还没有账号请 注册新账号