【问题标题】:How to remove respond_to block from scaffold_controller template如何从scaffold_controller 模板中删除respond_to 块
【发布时间】:2013-07-15 15:12:05
【问题描述】:

如何自定义脚手架生成器#was following this link

类 IdeasController

  # GET /ideas
  # GET /ideas.json
  def index
    @ideas = Idea.all
  end

  # GET /ideas/1
  # GET /ideas/1.json
  def show
  end

  # GET /ideas/new
  def new
    @idea = Idea.new
  end

  # GET /ideas/1/edit
  def edit
  end

  # POST /ideas
  # POST /ideas.json
  def create
    @idea = Idea.new(idea_params)

    respond_to do |format|
      if @idea.save
        format.html { redirect_to @idea, notice: 'Idea was successfully created.' }
        format.json { render action: 'show', status: :created, location: @idea }
      else
        format.html { render action: 'new' }
        format.json { render json: @idea.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /ideas/1
  # PATCH/PUT /ideas/1.json
  def update
    respond_to do |format|
      if @idea.update(idea_params)
        format.html { redirect_to @idea, notice: 'Idea was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @idea.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /ideas/1
  # DELETE /ideas/1.json
  def destroy
    @idea.destroy
    respond_to do |format|
      format.html { redirect_to ideas_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_idea
      @idea = Idea.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def idea_params
      params.require(:idea).permit(:name, :description, :picture)
    end
end

如何删除所有的respond_to代码?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 generator scaffolding


    【解决方案1】:

    使用respond_with 让您的控制器更干净。 This apidocthis screencast 将回答您的所有相关问题。

    您的控制器方法将像这样干净:

    def update
      @idea.update(idea_params)
      respond_with @idea, notice: 'Idea was successfully updated.'
    end
    

    要将其应用于默认脚手架控制器模板,只需从github 复制模板内容并将其放入RAILS_ROOT/lib/templates/rails/scaffold_controller/controller.rb。然后在那里应用respond_with 方法。

    【讨论】:

    • 当我按照这些说明操作时,我在更新操作(和其他操作)中没有 respond_with,而是生成器产生了一个 redirect_to。
    【解决方案2】:

    就这样吧。

    例如

    respond_to do |format|
      if @idea.save
        format.html { redirect_to @idea, notice: 'Idea was successfully created.' }
        format.json { render action: 'show', status: :created, location: @idea }
      else
        format.html { render action: 'new' }
        format.json { render json: @idea.errors, status: :unprocessable_entity }
      end
    end
    

    可以替换为

    if @idea.save
      redirect_to @idea, notice: 'Idea was successfully created.'
    else
      render 'new
    end
    

    【讨论】:

    • 但这是一次。下次我创建“rails generate scaffold posts name:string, body:textarea....”时,这个 respond_to 块会再次出现。
    • 哇,伙计,人们试图解决这么多严重的问题,而您却在浪费时间?只删除不需要的代码就这么难吗?这不需要很好的红宝石知识;)
    • 那么不要使用脚手架。你可以做 rails generate model Post rails generate controller posts。
    • 如果我将我的代码提供给某人,然后他们想要改进它怎么办。我应该继续告诉他们你想删除一些行来添加你的行吗?
    • 对不起什么。如果您不想要这些行,请不要使用脚手架。它是如此简单。就像我上面提到的那样独立生成模型和控制器。
    猜你喜欢
    • 2021-06-15
    • 2012-08-22
    • 2013-03-06
    • 1970-01-01
    • 2023-01-19
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多