#ruby-on-rails #ruby #wicked-pdf
Вопрос:
Я хочу создать pdf-документ с помощью wicked_pdf. Тем не менее, все учебные пособия делают это с использованием метода «показать». Я хочу сделать это вскоре после сохранения/создания элемента. Вот мой метод создания.
def create_item
item = Item.new
bcode = params[:bcode]
item.variant_id = params[:variantid]
item.brand_id = params[:brandid]
item.luitem_id = params[:itemid]
item.createdate = Date.today
item.user_id = session[:user_id]
ditem.save
gen_barcode
end`
И вот как я хочу создать PDF-файл
def gen_barcode
code = Bcode.maximum(:id)
respond_to do |format|
format.html
format.pdf do
render pdf: "item_#{code}",
template: 'layouts/gen_barcode.pdf.erb',
show_as_html: params[:debug].present?,
outline: { outline: true,
outline_depth: 50 },
margin: { top: 35,
bottom: 35,
left: 35,
right: 35 }
end
end
end
Я могу сгенерировать pdf-файл, выполнив http://localhost:3000/genbcode/1.pdf
Как я могу сгенерировать pdf-файл, вызвав gen_barcode после метода create_item?
Ответ №1:
Есть несколько способов сделать это. Во-первых, вы можете перенаправить на этот show
метод после успешного сохранения вашего элемента. Метод будет выглядеть следующим образом:
def create
@item = Item.new(item_params)
if @item.save
redirect_to item_path(@item, format: :pdf)
else
render "new"
end
end
Это приведет к перенаправлению на show
метод ItemController
, где вы можете отобразить pdf-файл, как вы это сделали в gen_barcode
методе. Это более предпочтительный способ, потому что каждый метод делает свое дело. Метод create
реагирует на создание объекта, и метод show
отображает результат.
Во — вторых, вы можете добавить respond_to
в свой метод создания.
def create
respond_to do |format|
format.pdf do
render pdf: "item_#{code}",
template: 'layouts/gen_barcode.pdf.erb'
end
end
end
И вам нужно установить правильный формат в форме
<%= form_for(@item, format: :pdf) do |form| %>
...
<%= form.submit "Submit" %>
<% end %>
Комментарии:
1. Спасибо @syberpunkq. Я отправлял свою форму с помощью Ajax. Мне пришлось переделать свою форму, и теперь она работает.