Ruby on rails 轨道;在初始值设定项中获取记录
我一直在想,在初始化器中获取记录是常见的吗 这是服务对象获取记录和生成的pdf接收文件的示例 输入是发票uuid,并获取相关记录,如卡片详细信息、初始值内的发票项目Ruby on rails 轨道;在初始值设定项中获取记录,ruby-on-rails,ruby,Ruby On Rails,Ruby,我一直在想,在初始化器中获取记录是常见的吗 这是服务对象获取记录和生成的pdf接收文件的示例 输入是发票uuid,并获取相关记录,如卡片详细信息、初始值内的发票项目 class Pdf::GenerateReceipt include Service attr_reader :invoice, :items, :card_detail def initialize(invoice_uuid) @invoice ||= find_in
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
问题是如果没有找到记录,这将生成一个错误。
我可以在初始值设定项中进行拯救,但这似乎并不常见
我怎样才能以更为ruby的方式解决这个问题呢?这主要是观点和轶事,但我更喜欢尽可能将我的价值观投射到链条的最上层。因此,我会在这个对象之前找到发票,并将其作为参数传入,与card_细节相同 如果您在这个类中这样做,它将限制协调这两个对象的责任,这是一种更容易测试的方法,但也会添加另一层,您必须在将来进行推理 那么我将如何处理,将其分为4部分 发票查询器 卡片查找器 以发票和卡片为参数的Pdf生成器 最后,是协调上述3个动作的方法 希望这有帮助
另外:请阅读avdi grimm的《自信的ruby》一书。它非常适合概述如何处理这种情况。谢谢!我同意,我已经有了这本书,但还没有读那么多。我明白了为什么要这样做,因为我异步生成并发送了一张收据,所以可能在排队后信用卡就被换了,这可能是个问题。