23

当您使用类似命令生成 rails 脚手架时rails g scaffold Thing,有什么方法可以避免烦人

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
4

4 回答 4

35

注释掉jbuilder您的Gemfilerespond_to块中的 gem 将不会生成。

于 2014-06-08T09:35:12.750 回答
13

只需克隆文件

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)。

于 2012-12-25T05:00:54.063 回答
1

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

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

于 2014-02-28T05:15:51.263 回答
0

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

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

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

于 2012-12-25T05:08:34.460 回答