我正在从 Rails 模型调用 API,如果 API 返回非 200 代码,我想引发错误。否则我想缓存/延迟加载数据。这是我的方法:
def data
@data ||= SNL.get_list(name)
raise StandardError, @data.inspect unless @data.success?
@data
end
这行得通,但我想知道我是否可以在一行中完成此操作。我尝试将and
运算符与 an 结合使用,unless
但无法正常工作。
更新:我接受了 tokland 的回答,因为我要求一行,他/她提供了两个非常好的解决方案。最后我实际上要使用
def data
@data ||= SNL.get_list(name)
@data.success? ? @data : (raise StandardError, @data.inspect)
end
为了可读性。我只是讨厌有第三行只是为了 return @data
,因为很少会引发异常。我觉得 odiszapc 的答案是简洁和可读性的最佳折衷。谢谢大家。