2010-08-31 27 views
3

這是我很懷疑。我應該使用模板呈現JSON還是使用Controller在RoR中返回JSON?

我們在RoR有一個項目,我們正在使用Ajax調用使其更加動態化。他們希望我把字面JSON放在html模板中,並用javascript中的eval()解析它,避免將異常放入Controller中,直接返回JSON響應。

舉例:WhateverControoler#索引 - >將呈現意見/ whatever_controller/index.html.erb(JSON在HTML模板中的文字):

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

我建議在WhateverControoler#指數

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

而不是把它放到Controller中,他們希望我使用Controller將正常渲染的模板來顯示文字JSON。

一些控制器已經開始/提高塊重定向到其他地方,因爲它需要把異常渲染JSON而不是redirct。

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

我需要一個強有力的理由來避免它,並顯示這是錯誤的。

這有意義嗎?我盡力解釋我可以。

PS:我知道,我可以使用「的respond_to做|格式| ...」但我需要的,如果因爲重定向statments,代碼已經凌亂,他們希望避免搞亂更

回答

3

如果可以,請避免使用模板。這裏有一個很好的理由列表:

  • 如果您使用render:json,Rails將負責其餘部分。它會設置正確的MIME類型,轉換內容並呈現良好的JSON響應。
  • 跳過模板渲染提高了性能。
  • JSON被設計成單行響應。如果您使用類似JSON的響應呈現模板,那麼您可能會返回一個較輕量級的響應。
1

從我的角度來看,通過erb生成json的主要缺陷是您不確定您的json是否有效(但這與html的猜測是一樣的)。你也必須自己設置mime類型。

to_json已經過很好的測試,因此可以預期輸出將是有效的JSON。

與to_json的主要問題是,它不能產生所有你想要的JSON和一些要求一個JSON建設者實例(請參閱本ticket

所以我的建議是,只要你不受to_json在控制器中的使用to_json的限制,並最終通過erb生成它

相關問題