【问题标题】:Why does Rails 4 scaffold create json.jbuilder files?为什么 Rails 4 脚手架会创建 json.jbuilder 文件?
【发布时间】:2013-05-23 17:30:45
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    Jbuilder gem 默认包含在 RoR 4 中。你可以在它的页面上阅读它。有一个关于它的演员表:Railscasts #320

    【讨论】:

    • 谢谢。我正在使用 RABL,它没有从 .rabl 文件生成 JSON。没有意识到 jbuilder 妨碍了。将其注释掉,一切正常。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如前所述,Rails 4 似乎将生成文件作为一种方式来获得响应 JSON 查询的模板。因此,假设您已经“搭建”了一个模型 Car,然后如果您转到 /car/1,它将返回一个 HTML 页面和汽车的详细视图(id 1)。

      然后如果你去/car/1.json,它会渲染show.json.jbuilder文件。似乎还有某种自动机制,因为脚手架时show 方法为空:

      def show
      end
      

      【讨论】:

      • 在控制器的顶部有一个before_action :set_modelname,它调用了私有方法def set_activity @modelname = Modelname.find(params[:id]) end
      • Then if you go to /car/1.json, it will render the show.json.jbuilder file 说得好
      【解决方案4】:

      回答“为什么”部分:

      多年来,Rails 中脚手架的相关性发生了一些变化。它不再意味着生成无法轻易抽象出来的必要代码。今天,它主要是一个教育工具,为您提供一些动态的示例并展示最佳实践。 (这也是为什么它们被撒上 cmets 有争议的用处的原因)

      换句话说,生成的文件是为了告诉你:

      如果您打算使用 Rails,这里有一个很好的方法。

      或在您的特定情况下:

      如果你要使用 JBuilder,这里有一个生成 JSON 的好方法。

      他们不是要告诉:“必须这样做。”或“你必须保留所有生成的东西,因为这是必要的。”

      【讨论】:

      • JSON 格式的 GET 方法(默认在 Rails 脚手架上生成)不是一个好习惯,因为 JSON 劫持。
      猜你喜欢
      • 2014-08-12
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2016-05-21
      • 2019-11-21
      • 1970-01-01
      相关资源
      最近更新 更多