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:in
render_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:in
realtime’
/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:in
render’
/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:in
pdf_write’
Vielleicht kann mir ja jemang weiterhelfen. Wie kann ich denn
unterbinden, daß
eine action gerendert wird?
Viele Grüße
Michael K.