2013-05-28 36 views
30

我使用rails new生成了一個新的rails 4(rc1)項目,並使用rails g scaffold生成了一個腳手架。爲什麼Rails 4腳手架創建json.jbuilder文件?

正如預期的那樣,它創建了遷移,控制器和所有必需的視圖文件。

它還創建了show.json.jbuilder和index.json.jbuilder。

我認爲這是爲了幫助從模型生成json。控制器也包含format.json調用。

問題:爲什麼它需要json和生成的應用程序的哪一部分使用json?它看起來不像(對我來說)視圖使用json來呈現任何東西,似乎它們在服務器端呈現(@model變量用於獲取內容的視圖中)。

邊緣指南(http://edgeguides.rubyonrails.org/)沒有看到提及的jbuilder以及爲什麼它需要那裏。

在此先感謝!請讓我知道,如果我能澄清這個問題。

回答

33

要回答「爲什麼」的一部分:

腳手架在Rails的相關性已經有所轉移,多年來。它不再意味着生成無法輕易抽象出的必要代碼。今天,它主要是一個教育工具,爲您提供一個有點動態的例子,並演示最佳實踐。 (這也是爲什麼他們撒了一些值得爭論的有用意見的原因)

換句話說,生成的文件是爲了告訴你:

如果你要使用Rails的,這裏是一個很好的辦法如何你可以做到這一點。

或在您的具體情況:

如果你要使用JBuilder,這裏是產生JSON的好方法。

他們是不是的意思是說:「這是必須要做的。「或」你必須保留所有生成的東西,因爲它是必要的。「

+0

JSON格式的GET方法(默認在Rails腳手架上生成)並不是一個好的做法,因爲JSON劫持。 – konyak

10

Jbuilder默認包含在RoR 4中的寶石。你可以在它的頁面上閱讀它。有一個關於它的演員:Railscasts #320

+7

thx,但是這並不回答我的問題 – vrepsys

+0

Thx對於這個,我使用的是RABL,它並不是從.rabl文件生成JSON,沒有意識到jbuilder正在開發中,評論它,並且它完美地工作。 –

14

Rails 4腳手架生成器創建jbuilder文件,因爲gem'Jbuilder'位於Gemfile中。如果您從您的Gemfile中刪除此功能將停止。

16

如前所述,Rails 4似乎生成的文件作爲一種方式來有一個模板來響應JSON查詢。所以假設你已經搭建了一個模型Car,那麼如果你去/car/1,它會迴應一個HTML頁面和汽車的詳細視圖(id 1)。

然後如果你去/car/1.json,它會渲染show.json.jbuilder文件。看起來也似乎是某種自動機制作爲show方法是空的,當腳手架:

def show 
end 
+4

在控制器的頂部有一個 '是fore_action:set_modelname' 它調用私有方法 '高清set_activity @modelname = Modelname.find(PARAMS [:編號]) end' – Anchor

+1

'然後,如果你去/car/1.json,它會呈現show.json.jbuilder文件很好地說 – Aleks

0

時下Angular或類似的框架非常流行,或者如果你正在爲移動應用程序編寫一個API,可以使用這個JSON構建器視圖。不是使用Rails視圖,其餘所有API的JSON已經成爲標準格式,同時有兩個HTML視圖的& JSON由rails腳手架自動創建是有用的