为什么Rails 4脚手架会创建json.jbuilder文件?

vre*_*sys 32 ruby-on-rails ruby-on-rails-4

我已经生成了一个新的rails 4(rc1)项目,使用rails new并生成了一个脚手架rails g scaffold.

正如预期的那样,它创建了迁移,控制器和所有必需的视图文件.

它还创建了show.json.jbuilder和index.json.jbuilder.

我假设这是为了帮助模型生成json.控制器也包含format.json调用.

问题:为什么它需要json以及生成的应用程序的哪个部分使用json?它看起来不像(对我来说)视图使用json渲染任何东西,似乎它们在服务器端呈现(@model变量在视图中用于获取内容).

边缘指南(http://edgeguides.rubyonrails.org/)没有提到jbuilder以及为什么需要它.

提前致谢!如果我能澄清这个问题,请告诉我.

Dan*_*ski 34

回答"为什么"部分:

多年来,Rails中脚手架的相关性有所改变.它不再意味着生成无法轻易抽象出来的必要代码.今天,它主要是一个教育工具,为您提供一个有点动态的例子,并展示最佳实践.(这也是他们散布有争议有用性的评论的原因)

换句话说,生成的文件旨在告诉您:

如果您打算使用Rails,这是一个很好的方法.

或在您的具体情况下:

如果您打算使用JBuilder,这是生成JSON的好方法.

他们并不打算说:"这就是必须要做的事情." 或者"你必须保留所有生成的东西,因为它是必要的."


Seb*_*mba 19

如前所述,Rails 4似乎生成文件作为一种模板来响应JSON查询.所以,假设你已经"搭建"了一个模型Car,那么如果你去的话,它将用HTML页面和汽车的详细视图(id 1)进行响应/car/1.

然后,如果你去/car/1.json,它将呈现show.json.jbuilder文件.似乎还有某种自动机制,因为show当脚手架时方法是空的:

def show
end
Run Code Online (Sandbox Code Playgroud)

  • 在控制器的顶部有一个`before_action:set_modelname`,它调用私有方法`def set_activity @modelname = Modelname.find(params [:id])end` (4认同)

Der*_*rek 14

Rails 4脚手架生成器创建jbuilder文件,因为gem'Jbuilder'在Gemfile中.如果您从此Gemfile功能中删除此功能将停止.


Yev*_*yev 10

默认情况下,Jbuilder gem包含在RoR 4中.你可以在它的页面上阅读它.有关于它的演员:Railscasts#320.