2016-12-13 1 views
1

컨트롤러에 html 또는 CSV 형식으로 응답하는 검색 방법이 있습니다. html 형식은 예상대로 검색 결과를 렌더링하며 결과의 CSV 파일을 다운로드하여 CSV 형식을 작동하도록합니다.레일 : respond_to 블록 내의 처리 오류 (csv)

대부분의 경우 send_data이 호출되고 CSV 파일이 생성됩니다. 그러나 이 없으면은 CSV를 생성하고 대신 오류를 표시합니다 (예 : 사용자가 해당 달에 할당 된 모든 내보내기를 사용한 경우). 다음 코드는 같은 간단한 버전입니다 할 수 있지만이 오류를 처리하는 방법을 좋아하지 않는 것처럼 보입니다.

respond_to do |format| 
     format.html do 
     @results = ... 
     render "index" 
     end 

     format.csv do 
     @results = ... 

     if user_can_export?(@results) 
      send_data generate_csv(@results), filename: "Search-Results.csv" 
     else 
      flash[:error] = "Unable to export search results." 
      render "index" 
     end 
     end 
    end 

날이 블록의 탈옥과 HTML 렌더링 또는 여기 csv 파일을 생성 붙어 있어요하기 위해 어떤 방법이 있습니까? 나는 그 안에 포함 된 오류 메시지와 함께 CSV 파일을 보내이 상황을 처리하지 않는 것을 선호하지만, 그 순간에 내 최선의 선택처럼 보인다. 도움을 주시면 감사하겠습니다!

+0

를 사용할 필요가 현재 요청주기에 플래시 메시지를 표시합니다. – max

+0

좋은 캐치. 이 모든 것은 실제 코드가 아니며, 아이디어를 제공하기 위해 타이핑 한 것입니다. 위의 오타가 수정되었습니다 –

답변

1

text/csv 대신 text/html으로 콘텐츠 형식 헤더를 설정해야합니다.

render template: "things/index.html.erb", content_type: "text/html" 

또한 당신은 당신이 오류로 이어질 것`은``후 .` "없습니다 검색 결과를 내보낼"flash.now[:error] = "Unable to export search results"

+0

아직 템플릿 오류가 누락되었습니다. 여전히 CSV 형식을 사용하려고 시도하는 것 같습니다 : '{: locale => [: en], : formats => [: csv], : handlers => [: erb] 템플릿 취약성/색인, 응용 프로그램/색인 누락 , : builder, : coffee, : rabl]}. –

+0

아, 템플릿에 대한 명시 적 경로를 사용해야합니다. 'render template : "things/index.html.erb" – max

+0

레일즈가 여전히 요청을 CSV로 다루고 있기 때문에 잘못된 템플릿을 찾습니다. 당신은'content_type = "text/html"을 사용하여 그것을 해결할 수 있습니다. 응답 객체를 변경하여 템플릿 조회를 위해'html'을 사용할 것입니다. – max