2010-04-03 4 views
4

/reports/generate_report를로드하면 레일스 앱에서 XML을 생성합니다.레일에 페이지로드하기

별도 페이지에서이 XML을 변수로 읽고 데이터베이스에 저장하고 싶습니다.

어떻게하면됩니까? /reports/generate_report.xml URI의 응답을 어떻게 든 변수로 스트리밍 할 수 있습니까? XML이 동일한 웹 응용 프로그램에서 생성 되었기 때문에 더 좋은 방법이 있을까요?

class AnotherController < ApplicationController 
    def archive_current 
    @output = # get XML output produced by /reports/generate_report 
    # save @output to the database 

    respond_to do |format| 
     format.html # inform the user of success or failure 
    end 
    end 
end

가 해결 : 내 솔루션 (믈라덴 Jablanović 덕분에) :

다음
class ReportsController < ApplicationController 
    def generate_report 
    respond_to do |format| 
     @products = Product.all 
     format.xml { render :layout => false } 
    end 
    end 
end

나는 쓰기를 시도하고있는 작업은 다음과 같습니다

내 generate_report 작업입니다
@output = render_to_string(:file => 'reports/generate_report.xml.builder')

다음 코드를 모델 클래스에서 사용했습니다.

av = ActionView::Base.new(Rails::Configuration.new.view_path) 
@output = av.render(:file => "reports/generate_report.xml.builder")
+0

왜 데이터를 XML로 변환 한 다음 데이터베이스에 다시 저장하려고하는지 궁금합니다. – Salil

+0

@ Salal : 이전 버전의 데이터를 버전 관리와 같은 종류의 데이터베이스에 저장하려고합니다. – titaniumdecoy

답변

2

아마 당신은 render_to_string를 사용하여 문자열로 XML을 렌더링하는 것과 동일한 컨트롤러 (아마 개인 일) 내에 별도의 방법으로 논리를 렌더링하여 XML을 추출하고 generate_reportarchive_current 행동에서 모두 호출 할 수 있습니다.

+0

@output = render_to_string (: file => 'reports/generate_report.xml.builder')를 사용하여 페이지를 변경하지 않고 문자열로 렌더링 할 수있었습니다. 당신의 도움을 주셔서 감사합니다. – titaniumdecoy

1

내가 일반적으로 이러한 유형의 상황에서 할 것은 보고서를 생성하기 위해 별도의 모듈/클래스/모델을 만드는 것입니다 (: 어 render_to_string 이후 같은 작업은 ActionController :: 자료의 보호 방법 (으론)입니다 제품 모델에서 잠재적으로 옳을 수도 있습니다). 이 개별 구성 요소는 app/models이거나 lib 일 수 있습니다. 어떤 경우라도 압축을 풀면 어디에서나 사용할 수 있습니다. 컨트롤러가 직접 호출 할 수 있습니다. 콘솔에서 생성 할 수 있습니다. cron 작업을 생성 할 수 있습니다. 이것은보다 융통성이있을뿐만 아니라 보고서가 느리게 생성되는 경우 요청 응답 시간을 원활하게 해줍니다.

템플릿을 사용하고 있기 때문에 컨트롤러 경로가 편리하다는 점을 알고 있기 때문에 보조 라이브러리에 루비 템플리트 시스템을 포함시켜야한다고해도 덜 혼란스럽고 유연해질 수 있습니다. 컨트롤러를 통과합니다.

1

@output는 = Product.all.to_xml

0

미안 해요, 당신은 XML에 대한 또는 세션에 대한 질문입니까? 나는 당신의 행동이 질문에 대해 XML 자료를 생성한다는 사실을 의미합니까? 아니면 단지 후자 사용을위한 작업 결과를 저장하고 싶습니까?
"별도의"페이지에서 다른 요청을하셨습니까? (사용자가 승인 한 후입니까?) 왜 출력을 저장 하시겠습니까? 렌더링 된대로 정확하게 저장해야하기 때문에? (예를 들어, 사용자가 하나의 보고서를 저장하기 위해 클릭하고 다른 보고서를 저장하면 좌절 할 수 있습니다.) 아니면 생성하는 데 비용이 많이 듭니까?
또는 잘못되었을 수도 있습니다. 리팩토링에 관한 것입니까?