2013-04-08 53 views
1

在Rails的控制器的更新動作同樣的動作,通常有代碼看起來像這樣:的respond_to和重定向在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取決於請求的格式。這有道理嗎?如果是這樣,你將如何避免錯誤:「在這個動作中渲染和/或重定向被稱爲多次」

+1

在這種情況下,您不必擔心「在此操作中多次調用渲染和/或重定向」,因爲它是其中一個或另一個。從來沒有。 – Mischa 2013-04-08 13:40:51

回答

3

對我有意義。答案應該很簡單,只需後redirect_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干擾。