2011-02-03 4 views
2

레일 3에서 나는 포토 컨트롤러에서 파괴 액션을위한 다음 코드를 가지고있다.레일 3에서 아약스 대 HTML 요청에 대한 다른 액션 렌더링

 def destroy 
     @photo = Photo.find(params[:id]) 
    if @photo.destroy 
     flash[:notice] = t('photo.deleted') 
     respond_to do |format| 
     if request.xhr? 
      format.js 
     else 
      format.html {redirect_to photos_path} 
     end 
     end 
    else 
     flash[:alert] = t('.photo.error_deleting') 
     if request.xhr? 
     redirect_to(photos_url) 
     else 
     redirect_to(photo_path @photo) 
     end 
    end 
    end 

표준 링크에서 호출되고 destroy.js가 호출되면 목표를 인덱스 페이지로 리다이렉션하는 것이 본질적이다 원격 링크. 이것은 작동하지만 레일즈 3에서 이것을 수행하는 더 깨끗한 방법이 있는지 궁금합니다. 아마도 respond_with 연산자를 사용하고 있을까요?

감사

답변

3

이 당신을 위해 작동합니다 :

respond_to :html, :js 

def destroy 
    @photo = Photo.find(params[:id]) 
    if @photo.destroy 
    flash[:notice] = t('photo.deleted') 
    else 
    flash[:alert] = t('.photo.error_deleting') 
    end 

    respond_with(@photo) 
end 

는 여기에 대한 좋은 블로그 게시물이 : 여기 http://ryandaigle.com/articles/2009/8/10/what-s-new-in-edge-rails-default-restful-rendering

는 논리에 대한 포스트에서 인용입니다 :

: html 형식이 req 인 경우 uested :

  • 그것은 GET 요청이 있었다면, 그것은 POST 요청했고 자원이 유효성 검사 오류가 렌더링이있는 경우
  • (현재의 행동을보기 템플릿을 표시하는) 렌더링 호출 : 새로운 (그래서 사용자가 자신의 오류를 해결할 수 있습니다) 그것은 PUT 요청 인 경우
  • 과 자원이 유효성 검사 오류를 가지고, 렌더링 : 그렇지
  • 을 (그래서 사용자가 자신의 오류를 해결할 수) 편집, 리소스로 리디렉션 위치 (즉 USER_URL) 다른 형식이 요청 된 경우

(예 : XML 또는 : JSON)가 GET 요청이 있었다면

  • 의 호출 : 자원에 대한 방법 및 전송 to_format 그 뒤로
  • 자원이 으로 이 요구 된 형식에서 오류를 다시 보내 유효성 검사 오류가있는 경우 : 그것은 POST 요청 인 경우 일을 호출, unprocessable_entity 상태 코드
  • E : 자원 및 에 방법 to_format와 그를 다시 보내 상태와 생성 : 시체는

로 확인 응답 : 자원 그렇지

  • 만든 새 의 위치는 다시 보내 documentation에서 to_format 부분에 조금 더 :

    먼저 우리가 템플릿을 사용할 수없는 경우, 템플릿을 렌더링하려고, 우리는 V 자원이 : to_format에 응답하고 표시하는 경우에 erify하십시오.

    대해도 Railscast 있습니다 : http://railscasts.com/episodes/224-controllers-in-rails-3

  • 관련 문제