跳过 Rails 中的 JSON 格式生成脚手架

Posted

技术标签:

【中文标题】跳过 Rails 中的 JSON 格式生成脚手架【英文标题】:Skip JSON format in rails generate scaffold 【发布时间】:2012-12-11 05:56:32 【问题描述】:

当你使用rails g scaffold Thing 之类的命令生成rails 脚手架时,有什么办法可以避免烦人

respond_to do |format|
  format.html # index.html.erb
  format.json  render json: @things 
end

控制器中的东西?

我正在尝试在 Rails 上教授一门课程,我想先让它们生成一个脚手架,但是对于所有 json 格式,它比需要的复杂得多。如果他们能生成一个像这样创建控制器的脚手架,我会更高兴:

class ThingsController < ApplicationController

  def index
    @things = Thing.all
  end

  def show
    @thing = Thing.find(params[:id])
  end

  def new
    @thing = Thing.new
  end

  def edit
    @thing = Thing.find(params[:id])
  end

  def create
    @thing = Thing.new(params[:thing])
      if @thing.save
        redirect_to @thing, notice: 'Thing was successfully created.'
      else
        render: "new" 
      end
    end
  end

  def update
    @thing = Thing.find(params[:id])
      if @thing.update_attributes(params[:thing])
        redirect_to @thing, notice: 'Thing was successfully updated.'
      else
        render: "edit" 
      end
    end
  end

  def destroy
    @thing = Thing.find(params[:id])
    @thing.destroy
    redirect_to things_url
  end
end

【问题讨论】:

【参考方案1】:

将不会生成 Gemfilerespond_to 块中的 gem jbuilder

【讨论】:

rails 5 中仍然有效,并且还省略了 .jbuilder 视图的生成。这应该是公认的答案。 实际上正确的答案(完全不禁用jbuilder)是在Rails 配置中禁用生成器。见***.com/questions/22484281/… config.generators do |g| g.jbuilder = false end(复制自@anka 分享的链接)【参考方案2】:

只需克隆文件

https://github.com/rails/rails/blob/v5.2.2/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb

给你的

lib/rails/generators/rails/scaffold_controller/templates/controller.rb

您的应用程序中的路径并自定义您想要的内容。此外,您可以编写自己的脚手架生成器 (http://guides.rubyonrails.org/generators.html)。

【讨论】:

废话,你打败了我!很好的答案!【参考方案3】:

我认为你会错失良机。一方面,您将教授非标准 Rails,因此当您的学生在自己的安装中看到正常版本时可能会感到困惑。

更重要的是,控制器以这种方式格式化是有原因的。 Rails 强调 REST,它鼓励通过多种数据格式访问资源。许多现代应用不再强调较慢的服务器渲染 html/erb 响应,转而支持 json API。我意识到这是在你的 OP 之后一年多一点,你在课堂上的时间有限,只是为任何可能发生的人添加一些想法。我想你可以在 response_to 上挥手,告诉他们它正在为你未来的一些可能性做准备。

【讨论】:

【参考方案4】:

您会注意到 JSON 响应被直接编码到此处用于 rails 生成器的模板中:

https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb

我认为需要注意的是,脚手架生成器的真正目的是说明和教育 Rails 堆栈的工作原理,它展示了如何编辑控制器以提供多种不同的格式以满足您的需求!

【讨论】:

以上是关于跳过 Rails 中的 JSON 格式生成脚手架的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用to_json生成嵌套的json格式时,ruby on rails中的未定义方法错误?

Ruby on Rails URL 格式

rails 生成脚手架用户名:字符串电子邮件:字符串

如何更改 Rails 脚手架中的默认模型模板?

Ruby/Rails:生成脚手架的代码在哪里

Node.js 中是不是有类似 Rails 中的脚手架的东西? [关闭]