1

在 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。这有意义吗?如果是这样,您将如何避免错误:“在此操作中多次调用渲染和/或重定向”

4

1 回答 1

3

我感觉合理。答案应该很简单,就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来自某个地方的干扰。

于 2013-04-08T13:33:54.047 回答