2015-08-17 3 views
0

некоторая информация, почему я такая ситуация:Сохранить форму и сделать PDF

в моем приложении, пользователь может изменить некоторые данные в форме и хранить его. он также может генерировать PDF с этими изменениями. пользователю пришлось сохранить его, снова открыть диалоговое окно и теперь можно распечатать эти изменения.

Это нехороший способ. я изменил его на одно действие. теперь пользователь может сохранить изменения, форма будет закрыта. если пользователь хочет распечатать изменения , он просто может нажать кнопку печати, измененные данные будут сохранены в , после чего документ будет напечатан.

У меня было 2 кнопки в моей форме, которые будут отправлены через ajax remote: true. Одна кнопка - кнопка отправки по умолчанию, чтобы сохранить изменения и закрыть форму.

Другая кнопка value=print должна сохранять изменения, визуализировать pdf-файлы, отправлять их в браузер и закрывать форму.

это работает очень хорошо. но выглядит не очень хорошо для меня.

форма

<%= form_for @product, remote: true do |f| %> 
    <!-- some boring fields --> 
    <button class="btn btn-default glyphicon glyphicon-print" type="submit" value="pdf" name="print"></button> 
    <button type="button" class="btn btn-default" data-dismiss="modal"><%=t('forms.close')%></button> 
    <button class="btn btn-primary" type="submit"><%=t('forms.save')%></button> 
<% end %> 

там вы можете увидеть, как кнопки отправки.

действия контроллера

def show 
    # just generate the pdf and render it to browser 
    # render_pdf will perform the send_file method with default :attachment 
    render_pdf PdfEngine.render params 
end 

def update 
    @product = Product.find params[:id] 
    # do the update logic 
    render :create 
end 

парциальное create.js.erb

<% if params[:print] %> 
    location.href='<%=product_path(@product)%>' 
<% else %> 
    // do some blinky stuff 
    // close the form and so one 
<% end %> 

есть лучший способ хранить и хранить и визуализации PDF?

ответ

0

Есть несколько способов, которыми вы могли бы справиться.

1) сгенерируйте pdf-файл, сохраните его в файле filesytem и дайте пользователю ссылку для загрузки pdf-файла.

2) сгенерируйте pdf-файл, сохраните его в местоположении tmp и используйте send_file для его отправки непосредственно пользователю (создание диалогового окна «Сохранить файл» в браузере).

Мне непонятно, какие из них вы сейчас делаете. Предоставляет ли render_pdf файл обратно пользователю или загружает файл в свой браузер или что-то еще?

Я думаю, что ваш вопрос слишком расплывчатый и открытый: вам было бы лучше выбрать то, что вы хотите, а затем получить помощь, чтобы это произошло.

EDIT: приятнее способ справиться с этим, чтобы иметь дисплей show действия некоторыхи информацию о товаре на странице, в обычном режиме, для HTML запросов и возвращать ПДФ информации о продукте для запросов в формате PDF ,т.е.

def show 
    @product = Product.find params[:id] 
    respond_to do |format| 
    format.html #default is to render the show template, let it do that 
    format.pdf do 
     render_pdf PdfEngine.render params #not sure exactly what this requires from params 
    end 
    end 
end 

Вам нужно будет сделать это в вашей конфигурации, если вы еще не

#in config/initializers/mime_types.rb 
Mime::Type.register 'application/pdf', :pdf 

Теперь вы можете иметь регулярное шоу-страницу, которая показывает информацию о продукте, и есть ссылка на PDF на нем:

<%= link_to "Download PDF", product_path(@product, :format => "pdf") %> 

Также я бы ваше создать действие, в случае успеха, перенаправление на страницу шоу, так как это нормальное поведение:

def update 
    @product = Product.find params[:id] 
    @updated = @product.update_attributes(params[:product]) 
    if @updated 
    redirect_to product_path(@product) 
    else 
    render :action => "edit" #or whatever 
    end 
end 
+0

Я добавил дополнительную информацию. фактически я отправляю документ pdf в браузер и закрываю форму. оно работает. но я думаю, должен быть лучший способ сделать это – rob

+0

'redirect_to' хотите работать. его запрос ajax. метод show просто выполняет pdf. больше ничего. Мне не нужен он для вывода html. тип mime уже зарегистрирован. перенаправление будет выполняться за кулисами, поэтому ничего не произойдет. это немного сложно, я думаю, – rob

+0

Ах, если это удаленное действие (то есть ajax), то хорошим способом справиться с этим было бы отобразить частичное, которое имеет ссылку на документ, и использовать результат для замены div на страницы: поэтому после загрузки ссылки на документ появляется на странице. –