respond_to代码,并在轨道上的同一个动作重定向(Respond_to and redirec

2019-10-17 23:26发布

在Rails的控制器的更新操作通常有代码看起来像这样:

def update
  @book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
    redirect_to(@book)
  else
    render :edit
  end
end

在其他情况下,这将使编辑模板。 但是,如果我想使用的respond_to,完全相同的方式,我在编辑操作,如:

def update
  @book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
    redirect_to(@book)
  else
    respond_to do |format|
      format.html  # edit.html.erb
      format.json  { render :json => @team }
    end
  end
end

因此,如果更新失败,请确保您正在返回一个JSON或HTML根据请求的格式。 这是否有道理? 如果是这样,你将如何避免错误:“渲染和/或重定向被称为在这个动作多次”

Answer 1:

我感觉合理。 答案应该是简单的,只是returnredirect_to

def update
  @book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
    redirect_to(@book)
    return
  else
    respond_to do |format|
      format.html  # edit.html.erb
      format.json  { render :json => @team }
    end
  end
end

不知道你究竟是如何呈现多次,但假设你是一个精心布置的return应该告诉Rails停止处理重定向后,任何进一步的渲染。 如果这是所有真实的,很可能有一个after_filter从某处干扰。



文章来源: Respond_to and redirect in the same action in Rails