2013-05-28 99 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脚手架自动创建是有用的