Я пытаюсь выучить Rails и застрял.
У меня есть модели User, Job, Invoice и Customer. Я создаю счет-фактуру и Pdf-счет с Prawn. Счет-фактура в формате PDF не сохраняется (я не хочу сохранять PDF-файлы, просто чтобы просмотреть PDF-файл в браузере), и теперь мне нужна кнопка для отправки счета в формате PDF по электронной почте. У меня в накладной отображается вид 2 кнопки: одна для просмотра PDF, а другая для отправки PDF по электронной почте.
= link_to 'View PDF', invoice_path(@invoice, format: "pdf")
\|
= link_to "Send Email", invoice_mail_path(current_user, @invoice), class: "btn btn-xs btn-primary"
У меня есть:
invoice_mailer.rb
default from: "example@yahoo.com"
def invoice_mail(invoice, user, job)
@invoice = invoice
@user = user
@job = job
attachments["#{(@invoice.invoice_number)}.pdf"] = InvoicePdf.new(@invoice, view_context).render
mail(to: 'example@yahoo.com',
subject: "A new invoice from xxx")
end
invoices_controller.rb
def invoice_mail
# @invoice = Invoice.last
@invoice = Invoice.new(@invoice)
@user = current_user
@job = current_user.jobs
InvoiceMailer.invoice_mail(@invoice, @user, @job).deliver_now
flash[:notice] = "Invoice has been sent."
redirect_to invoices_path
end
routes.rb
get :invoice_mail, to: 'invoices#invoice_mail', as: :invoice_mail
В invoices_controller в def invoice_mail, если у меня есть
@invoice = Invoice.last
работает и отправляет электронное письмо с прикрепленным pdf-файлом, но получает последний счет. Если у меня есть
@invoice = Invoice.new(@invoice)
это дай мне ошибку.
Что мне нужно вместо @invoice = Invoice.last, чтобы получить текущий счет? Или что я не так сделал?
Когда я нажимаю кнопку отправки электронной почты, у меня на терминале:
Started GET "/invoice_mail.16-446cd684-c756-4ea3-a820-17756f44098d" for 127.0.0.1 at 2019-03-22 11:07:30 -0400
Processing by InvoicesController#invoice_mail as
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]]
↳ /Users/ovi_tsb/.rvm/gems/ruby-2.4.1/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
Completed 404 Not Found in 2ms (ActiveRecord: 0.4ms)
ActiveRecord::RecordNotFound (Couldn't find Invoice without an ID):
app/controllers/invoices_controller.rb:124:in `invoice_mail'