PDF schreiben - render unterbinden

Hallo,

ich kämpfe immer noch mit RTeX unter Rails 2.1.0

Immerhin habe ich herausgefunden, daß es sinnvoller ist das PDF über
render_to_string zu speichern/cachen als über response.body.

Jetzt habe ich aber das Problem, daß innerhalb eines Requests zweimal
render
aufgerufen wird, wenn ich das generierte PDF über render_to_string
abspeichern
möchte.

Das PDF generiere ich mit der Methode pdf_generate im Controller:


def pdf_generate
@magazine = Magazine.find(params[:id])
@file_path = File.join(RAILS_ROOT, DIR_PATH, @magazine.file_name)
render :template => @magazine.template,
:filename => @magazine.file_name,
:preprocess => true
end


Diese kann ich direkt aufrufen und sie liefert dann das PDF.

Das Schreiben der PDF geschieht mit pdf_write:


def pdf_write
@magazine = Magazine.find(params[:id])
@file_path = File.join(RAILS_ROOT, DIR_PATH, @magazine.file_name)
pdf_file = render_to_string(:action => pdf_generate)
FileUtils.makedirs(File.dirname(@file_path))
File.open(@file_path, “wb+”) { |f| f.write(pdf_file) }
end


Wie man sieht, ruft render_to_string die action pdf_generate auf. Und da
ist das
Problem, weil hier zum zweiten mal gerendert wird. Was ja nicht erlaubt
ist:


ActionController::DoubleRenderError in Public
magazinesController#pdf_write

Can only render or redirect once per action
RAILS_ROOT: /Users/kastner/Documents/rails_projects/ltree

Application Trace | Framework Trace | Full Trace
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:838:in
render_with_no_layout' /usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/layout.rb:259:inrender_without_benchmark’
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:51:in
render_without_rtex' /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/benchmark.rb:8:inrealtime’
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:51:in
render_without_rtex' vendor/plugins/rtex/lib/rtex/framework/rails.rb:28:inrender’
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:930:in
render_to_string' app/controllers/public_magazines_controller.rb:25:inpdf_write’


Vielleicht kann mir ja jemang weiterhelfen. Wie kann ich denn
unterbinden, daß
eine action gerendert wird?

Viele Grüße

Michael K.

Am 04.06.2008 um 11:33 schrieb Michael K.:

Hallo,

ich kämpfe immer noch mit RTeX unter Rails 2.1.0

Immerhin habe ich herausgefunden, daß es sinnvoller ist das PDF
über render_to_string zu speichern/cachen als über response.body.

Jetzt habe ich aber das Problem, daß innerhalb eines Requests
zweimal render aufgerufen wird, wenn ich das generierte PDF über
render_to_string abspeichern möchte.

render and return.
Hab ich in fast jedem Controller (irgendwie traurig).

ciao, tom


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: [email protected]