2014-09-10 3 views
0

데이터베이스에 axslx 파일을 저장할 수있는 기능을 개발하려고합니다. 기본적으로 EXCEL보고 하위 시스템을 상상합니다. Excel 템플리트를 작성하여 보고서 테이블에 저장할 수 있습니다.레일스는 데이터베이스에 xlsx 템플릿을 저장합니다.

나는 gem 'panoramic'을 사용하고 있습니다. 그것은 내가 axslx 파일을 데이터베이스에 저장할 수있게 해줍니다! 그러나 그들이 일하기 위해서는 컨트롤러의 경로와 동작에 항목이 있어야합니다. report1 ... report10과 같이 여러 항목을 사용하여 작성할 수 있습니다. 그러나 보고서의 수에 제한이 있습니다. 하나를 사용하는 몇 가지 방법

def report1 
    respond_to do |format| 
    disposition = 'attachment; filename= ' + '"' + 'report1.xlsx" ' 

    format.xlsx { 
     response.headers['Content-Disposition'] = disposition 
    } 
    end 
end 

def report2 
    respond_to do |format| 
    disposition = 'attachment; filename= ' + '"' + 'report2.xlsx" ' 

    format.xlsx { 
     response.headers['Content-Disposition'] = disposition 
    } 
    end 
end 

있나요 :

get "reports/report1" 
get "reports/report2" 
... 

이 컨트롤러 코드 :

<% reportpath = 'report' + report.report_number.to_s + '.xlsx' %> 
<td><%= link_to "Download", report_path(reportpath), :class => 'btn btn-warning btn-xs' %></td> 

는 루트입니다 :

뷰 코드 경로 및 컨트롤러 동작?

감사합니다. 어떤 이유로 당신이 매개 변수를 통해 번호를 전달할 수 없습니다 당신이 경로로를 포함 할 경우

답변

0

당신은 dynamic route segments 사용할 수 있습니다 :

get "reports/:report_name" => 'reports#report', constraints: { report_name: /report[0-9]+/ } 

그리고 컨트롤러에

def report 
    report_name = params[:report_name] 
    respond_to do |format| 
    disposition = "attachment; filename=\"#{report_name}.xlsx\"" 
    format.xlsx { 
     response.headers['Content-Disposition'] = disposition 
     render report_name 
    } 
    end 
end 

업데이트를

조금 더 깨끗한 방법으로 :

resources :reports, only: [:show] 

def show 
    report_name = params[:id] 
    raise ActionController::RoutingError.new('Not Found') unless /report[0-9]+/.match report_name 
    respond_to do |format| 
    disposition = "attachment; filename=\"#{report_name}.xlsx\"" 
    format.xlsx { 
     response.headers['Content-Disposition'] = disposition 
     render report_name 
    } 
    end 
end 
+0

하면 ArgumentError : 정규 표현식 앵커 문자가 라우팅 요구 사항에 사용할 수 없습니다 :/\ Areport [0-9] + \ Z/ – Reddirt

+0

내가 제약 조건을 제거하면, 내가 얻을 : 템플릿 보고서를 누락/{: locale => [: en], : formats => [: xlsx], : variants => [], : 처리기 => [: erb, : 빌더, : 원시, : 루비, : jbuilder, : 커피, : axlsx]}. 검색된 결과 : * "# Panoramic :: Resolver : 0x007ffbb7a7c668>"- 보고서/보고서 대신 보고서/보고서를 찾고 있습니다. – Reddirt

+0

죄송합니다. 삭제 된 앵커 문자를 업데이트하고 템플릿을 명시 적으로 지정했습니다. – biomancer

관련 문제