From 5fc790cd42e4e83bf70fdf38689dfcb313a96333 Mon Sep 17 00:00:00 2001 From: kbe Date: Thu, 4 Sep 2025 01:43:40 +0200 Subject: [PATCH] fix: Resolve QR code generation errors in ticket PDF creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add validation in TicketPdfGenerator to ensure QR code data integrity - Use compact() to remove nil values from QR code data hash - Add error handling in Ticket#generate_qr_code with fallback generation - Validate QR code data before passing to RQRCode library - Add proper error logging for QR code generation failures - Prevent "data must be a String, QRSegment, or an Array" errors 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- app/models/ticket.rb | 4 ++++ app/services/ticket_pdf_generator.rb | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 3dd744a..d01f9d8 100755 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -63,6 +63,10 @@ class Ticket < ApplicationRecord self.qr_code = SecureRandom.uuid break unless Ticket.exists?(qr_code: qr_code) end + rescue => e + Rails.logger.error "Failed to generate QR code for ticket: #{e.message}" + # Generate a simple fallback QR code + self.qr_code = "#{id || 'temp'}-#{Time.current.to_i}-#{SecureRandom.hex(4)}" end diff --git a/app/services/ticket_pdf_generator.rb b/app/services/ticket_pdf_generator.rb index 71abf35..a513b33 100755 --- a/app/services/ticket_pdf_generator.rb +++ b/app/services/ticket_pdf_generator.rb @@ -63,12 +63,22 @@ class TicketPdfGenerator pdf.text "Ticket QR Code", align: :center pdf.move_down 10 + # Ensure all required data is present before generating QR code + if ticket.qr_code.blank? + raise "Ticket QR code is missing" + end + qr_code_data = { ticket_id: ticket.id, qr_code: ticket.qr_code, - event_id: ticket.event.id, - user_id: ticket.user.id - }.to_json + event_id: ticket.event&.id, + user_id: ticket.user&.id + }.compact.to_json + + # Validate QR code data before creating QR code + if qr_code_data.blank? || qr_code_data == "{}" + raise "QR code data is empty or invalid" + end qrcode = RQRCode::QRCode.new(qr_code_data) pdf.print_qr_code(qrcode, extent: 120, align: :center)