有没有办法在Ruby,Rails或ActiveRecord中链接条件?

时间:2017-08-31 15:22:27

标签: ruby ruby-on-rails-4 rails-activerecord

有时候我发现自己在做类似的事情:

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那样简洁优雅的东西,我可以在它的位置使用?

1 个答案:

答案 0 :(得分:2)

如果您是肯定的,将返回单个或无记录,您可以安全地使用枚举器:

SomeModel.where(some_attr: 'some_val')
         .limit(1)
         .map(&:some_method)
         .first