print multiple pages

I have a nice Product model, which has a lot of fields, the controller has a Index and Show method to list the products and show the details both with a print procedure using windows.print() and a print format css which makes the printouts look good. Happy days! Until I get a request that the sales guys want a "print-all" function, that prints out the 40 or so product details (a page a product) using the Show product format, so they dont have to move through each product printing them individually; the resulting print-out makes a good catalogue which they can then easily update.

I am only just mastering RAILS and dont have problems with CRUD but I think this is somewaht out of my depth.

Can anyone help?

I haven't done anything with formatting output for print, so take this with a grain of salt, but methinks this ought to work:

- First, I assume you have a button or link or whatever that goes to some URL that's supposed to give them a printable catalog, and that we can control this URL so as to make it point to a given action of a given controller.

- In the controller, load up an array, let's call it @products, with all the products, including all the details that go into the catalog. You can use the :include option on the search to make sure that they're grabbed off any associated objects. You put that logic either in the controller itself, or better, in the model, exposing some call like Product.get_all_for_catalog. (If you want to print multiple types of catalog, you could even have that take some filtering args, in which case the "all" part might be misleading, and maybe some format identification, which could determine which details to include.) So your controller might contain something like "@products = Product.get_for_catalog({ :which => :all, :format => :print })".

- In the view, output whatever front material you want (cover, ToC, etc.), iterate over @products (outputting the description), and finally output whatever back material you want (order form, index, back cover, etc.). You could use the existing HTML description output, or alternately put it all in a PDF document with a library like Prawn. If you want, you can force a page break between each, or use some kind of pagination helper like will_paginate. (Depends how long your product descriptions are.) Iterating over it might look something like:

  <% @products.each do |prod| %>     <%= render_partial product_print, prod %>   <% end %>

Be careful which lines you have the = sign on; that's what tells ERb to actually show it, not just do it.