2011-10-14 3 views
3

모델 속성을 업데이트하는 업데이트 메소드가있는 컨트롤러가 있는데 성공하면 플래시 알림을 설정하고 편집 페이지를 다시 렌더링합니다. 동일한 플래시 알림을 클릭하는 다음 링크는 페이지를로드/렌더링 할 때 두 번째로 팝업됩니다. 무슨 일이야? 플래시 [: notice]를 한 번만 표시하려면 어떻게합니까? 왜 다음 응답으로 지속됩니까?레일 컨트롤러에 플래시 알림 지속

컨트롤러 :

당신이 플래시 알림이 바로 표시 할 경우
def update 
    respond_to do |format| 
    if @resource.update_attributes(params[:resource]) 
     flash[:notice] = "Resource successfully updated" 
     format.html{ render :action => "edit" } 
    else 
     format.html{ render :action => "edit" } 
    end 
    end 
end 

답변

12

, flash.now[:notice] 대신 flash[:notice] 사용합니다. 기본 동작은 후속 요청이 처리 될 때까지 플래시를 저장하는 것입니다. 여기서 now 버전은 현재 요청이 완료된 후에 플래시를 지 웁니다.

+0

감사합니다. 이 대답은 제가 부탁했던 행동의 원인을 설명합니다. – Bee

+0

. 이게 내 문제를 해결했습니다. 고맙습니다! –

2

성공적인 버전 이후에 render 메서드를 사용하지 않아야합니다. 대신 redirect_to를 사용해보십시오 :

respond_to do |format| 
    if @resource.update_attributes(params[:resource]) 
     flash[:notice] = "Resource successfully updated" 
     format.html{ redirect_to :action => edit, :id => @resource } 
    else 
     format.html{ render :action => "edit" } 
    end 
end 

확인 Rails Guide을 두 방법의 차이점에 대한 자세한 내용은.

+0

render/redirect의 차이점을 이해했으며 기본적으로이 경우 리디렉션보다는 원하는 템플릿보기를 렌더링하는 것이 더 직접적인 것처럼 보였습니다. (브라우저로의 왕복은 필요하지 않으며 원하는보기를 위해 특별한 상태가 필요하지 않습니다.) 그래서 나는 당신의 "위에 있지 말아야 할 것"에 대해 궁금해하고 있습니다. 미래에 편집 작업이 특수한 상태를 필요로하는 경우 잠재적으로 자신을 반복하거나 (또는 ​​오류를 일으키는) 그냥 문제입니까? (예를 들어, 링크의 책 예) 다른 고려 사항이 있습니까? – Bee

+0

@Bee 몇 가지 문제를 일으킬 수있는 일 중 하나는 예를 들어 페이지를 즐겨 찾기에 추가하는 것입니다. 하나는 "편집 페이지입니다"라고 말한 페이지에 북마크하면 방문하면 편집 페이지가 나타납니다. 이 경우 쇼 페이지가 나타납니다. 페이지를 새로 고치고 얻은 것을 볼 수도 있습니다. 이 문제에 관해 좋은 기사를 읽은 것을 기억하지만, 지금은 찾을 수 없습니다. 내가 찾으면 그것을 내 의견에 링크 할 것이다. – maro

+0

@maro에 답변 해 주셔서 감사합니다. 나는 북 마킹에 대한 고려를 생각하지 않았고, 아마 그것 때문에 내 앱에서 리디렉션으로 바뀔 것이다. 그러나 @ tadman의 대답은 직접 질문에 응답하고 내 코드로 인한 동작을 설명하기 때문에 받아 들일 것입니다. – Bee

관련 문제