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 Kastner
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug