2013-04-08 3 views
1

에서 동일한 동작에 리디렉션 :Respond_to는 일반적으로 다음과 같습니다 코드가 레일 컨트롤러의 업데이트 작업에서 레일

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이에 따라 확인 요청한 형식. 그게 말이 되니? 그렇다면 "렌더링 및/또는 리디렉션이이 작업에서 여러 번 호출되었습니다."012를 방지 하시겠습니까?

+1

이 경우 "렌더링 및/또는 리디렉션이이 작업에서 여러 번 호출되었습니다."두려워 할 필요가 없습니다.이 경우 둘 중 하나이기 때문입니다. 둘 다 결코. – Mischa

답변

3

나에게 의미가 있습니다. 대답은 간단해야하며 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 말해야 레일을 가정하고 정확히 확인하십시오. 그게 사실이라면 어딘가에서 간섭하는 after_filter 일 가능성이 있습니다.

관련 문제