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

Antwort per Email an