我应该使用模板来渲染JSON还是使用Controller在RoR中返回JSON?

时间:2010-08-31 21:26:26

标签: ruby-on-rails ruby ajax json templates

这是我的怀疑。

我们在RoR中有一个项目,我们使用Ajax调用使其更具动态性。他们希望我将文字JSON放在html模板中并用javascript中的eval()解析它,避免将异常放入Controller中直接返回响应作为JSON。

示例:WhateverControoler #index - >将呈现views / whatever_controller / index.html.erb(html模板中的JSON文字):

{
"Success": "false",
"Date": ("need_login": "true")
}

我建议在WhateverControoler #index

中使用什么
render :json => (: success => false, :data => (:need_login => true))

他们希望我使用Controller正常呈现的模板来显示文字JSON,而不是将其放入Controller中。

有些控制器已经开始/提升了重定向到其他地方的块,因此我需要将异常放到渲染JSON而不是redirct。

if (is_ajax) render :json[..] else redirect_to [..] end

我需要有充分的理由避免它,并表明这是错误的。

这有道理吗?我试着尽力解释。

PS:我知道我可以使用“respond_to do | format | ...”但是由于重定向,我需要好像是法规,代码已经很乱,他们想避免弄乱更多

2 个答案:

答案 0 :(得分:3)

如果可以,请避免使用模板。以下是一个很好的理由清单:

  • 如果你使用render:json,Rails会处理其余的事情。它将设置正确的mime类型,转换内容并呈现格式良好的JSON响应。
  • 跳过模板渲染可提高性能。
  • JSON旨在成为单行响应。如果使用类似JSON的响应呈现模板,则可能会返回一个不那么轻量级的响应。

答案 1 :(得分:1)

从我的角度来看,通过erb生成json的主要缺陷是你不确定你的json是否有效(但我猜这与html的问题相同)。你也必须自己设置mime类型。

to_json已经过充分测试,因此您可以预期输出将是有效的JSON。

to_json的主要问题是它无法生成你想要的所有json,而且有些人要求提供json构建器(参见ticket

所以我的建议是,只要你不受to_json的限制,在控制器中使用to_json,最后通过erb生成它