使用Ruby的三元运算符? :缩短这个

时间:2015-06-26 17:05:56

标签: ruby-on-rails ruby ternary-operator

我想知道是否有办法收紧这个问题:

def find_by_recordtype
  e = EvLk.find_by_sql(<SQL QUERY>)
  return (e.size > 0 ? e : nil)   
end

我可以做类似下面的事情但是,不想再查询两次。

  return ( EvLk.find_by_sql().size > 0 ? EvLk.find_by_sql() : nil)

3 个答案:

答案 0 :(得分:4)

您正在使用find_by_sql,因此可能您使用的是Rails或者可以使用ActiveSupport。在这种情况下,您可以使用presence

  

<强>存在()

     

如果接收器存在则返回接收器,否则返回nilobject.presence相当于

object.present? ? object : nil

所以你可以这样做:

def find_by_recordtype
  EvLk.find_by_sql(<SQL QUERY>).presence
end

答案 1 :(得分:0)

你可以做的一件事是记住结果。

这是否有意义取决于对象和应用程序的上下文。

def find_by_recordtype
  return @records if @records

  @records = EvLk.find_by_sql(<SQL QUERY>)
end

+1 for ruby​​ nuby。

顺便说一句,你为什么要回归nil?通常情况下,对于所有情况,最好使用相同的类型。

答案 2 :(得分:-1)

EvLk.find_by_sql(<SQL QUERY>).tap{|e| break if e.empty?}