有时候我发现自己在做类似的事情:
def my_method
item = SomeModel.where(some_attr: 'some_val').first
(item) ? nil : item.method
end
这就是说,如果存在item
,则返回item.method
的结果,但如果它不存在,则返回nil或false。
我可以更简洁地写这样:
def my_method
SomeModel.where(some_attr: 'some_val').first.try(:some_method)
end
我听说过铁路rescue
操作可能会很昂贵。有没有像try
那样简洁优雅的东西,我可以在它的位置使用?
答案 0 :(得分:2)
如果您是肯定的,将返回单个或无记录,您可以安全地使用枚举器:
SomeModel.where(some_attr: 'some_val')
.limit(1)
.map(&:some_method)
.first