Мне было интересно, как часто выбирать записи в инициализаторе?Рельсы; Захват записей в инициализаторе
Здесь приведен пример использования объекта службы для извлечения записей и созданного файла приема PDF.
Вклад - это счет-фактура uuid
, а также получить связанные записи, такие как подробные сведения о карте, счета-фактуры в пределах начального.
class Pdf::GenerateReceipt
include Service
attr_reader :invoice, :items, :card_detail
def initialize(invoice_uuid)
@invoice ||= find_invoice!(invoice_uuid) # caching
@items = invoice.invoice_items
@card_detail = card_detail
end
.....
def call
return ReceiptGenerator.new(
id: invoice.uuid, # required
outline: outline, # required
line_items: line_items, # required
customer_info: customer_info
)
rescue => e
false, e
end
.....
def card_detail
card_metadata = Account.find(user_detail[:id]).credit_cards.primary.last
card_detail = {}
card_detail[:number] = card_metadata.blurred_number
card_detail[:brand] = card_metadata.brand
card_detail
end
end
Pdf::GenerateReceipt.('28ed7bb1-4a3f-4180-89a3-51cb3e621491') # => then generate pdf
Проблема в том, что записи не найдены, это порождает ошибку. Я мог бы спастись в инициализаторе, однако это кажется не распространенным.
Как я могу обойти это более рубиновым способом?
Спасибо! Я согласен, и у меня есть книга уже, но еще не так много читала. Я выяснил, почему я это сделал, потому что я асинхронно генерирую и отправляю квитанцию, поэтому, возможно, кредитная карта изменена сразу после помещения в очередь, это может быть проблемой. – Tosh