A nice way of doing previews is to have them dynamically update, see observe_field for this. You can also use link_to_remote with a ":with" parameter and pass the content of your form (Form.serialize):
<%= link_to_remote "Preview", :update=>'preview_panel', :url=>{ :action=>'preview' }, :with=>"Form.serialize('form_id')" %>
Max