Используя wicked_pdf, сохраните как pdf, включая предоставленные пользователем данные - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть шаблон для заполнения пользователем.Моя цель - преобразовать шаблон в pdf (содержащий информацию, предоставленную пользователем), используя wicked_pdf.

Кроме того, ни один из вводимых пользователем данных не влияет на модель / базу данных.Мне просто нужно преобразовать шаблон в PDF-файл, содержащий данные пользователя, и ничего более.

Пока что я могу преобразовать шаблон в PDF-файл, сохранить его и перенаправить обратно в представление индекса.Однако ни одно из полей, заполненных пользователем, не сохраняется;все поля, которые содержали ввод или значения, введенные пользователем, являются пустыми.Это просто сохранение пустого шаблона.Как я могу преобразовать PDF и предоставленные пользователем данные в PDF, используя wicked_pdf?

# controller save method --->
def save_grade_sheet
  @result = Result.find(params[:id])
  if current_user.admin?
    filename = "#{@result.user.last_name}_grades.pdf"      
    save_path = "#{Rails.root}/public/uploads/#{@result.user.last_name}/#{filename}"
    respond_to do |format|
      pdf = render_to_string pdf: filename, 
                            template: "/results/grade_sheet.html.erb", 
                            encoding: "UTF-8", 
                            disposition: "attachment", 
                            save_to_file: save_path, 
                            save_only: true
      File.open(save_path, "wb") do |file|
        file << pdf
      end
      flash[:notice] = "#{filename} successfully saved"
      format.html { redirect_to results_path }
    end
  else
    head :unauthorized
  end
end



# sample template code
<div>
  <div>
    <h2>PERSONNEL INFORMATION</h2>
    <p>Examinee's Name: <%= @result.user.first_name %> <%= @result.user.last_name %></p>
    <p>Examiner's Name: <input class="inline" type="text"></p>
  </div>
  <div>
    <p>Exam Type: <%= @result.test.upcase %></p>
    <p>Exam Version: <input class="inline" type="text"></p>
    <p>Exam Date: <%= @result.created_at.strftime("%m-%d-%y") %></p>
  </div>
  <%= button_to "Create Grade Sheet", save_grade_sheet_result_path(@result), data: { method: :post }, class: "btn btn-primary btn-lg"%>
</div>

1 Ответ

0 голосов
/ 05 декабря 2018

Я отправлял все по правильному маршруту, но на самом деле ни одна из данных не передавалась.Вместо этого мне нужно было обернуть все в form_tag и использовать submit_tag.

<%= form_tag(save_grade_sheet_result_path(@result), method: :post) %>
  <div>
    <h2>PERSONNEL INFORMATION</h2>
    <p>Examiner's Name: <%= text_field_tag :examiner_name, @examiner_name, class: "inline" %></p>
    <p>Exam Version:<%= text_field_tag :exam_version, @exam_version, class: "inline" %></p>
  </div>
  <%= submit_tag "Create Grade Sheet", class: "btn btn-primary btn-lg" %>
<% end %>

И в моем контроллере мне нужно было получить передаваемые параметры:

def save_grade_sheet
  @result = Result.find(params[:id])
  @examiner_name = params[:examiner_name]
  @exam_version = params[:exam_version]
  if current_user.admin?
    # existing code
  end
end
...