Respond_to并重定向Rails中的相同操作

在Rails控制器的Update操作中,通常会有如下代码:

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

在else的情况下,这将呈现编辑模板。 但是,如果我想使用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。 这有道理吗? 如果是这样,你将如何避免错误:“在此操作中多次调用渲染和/或重定向”

我感觉合理。 答案应该很简单,只需在redirect_to之后return

 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干扰。