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

Using Ruby's ternary operator ? : to shorten this

我想知道是否有办法收紧它:

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)

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

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

def find_by_recordtype
  return @records if @records

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

+1 代表 ruby 努比。

顺便说一句,你为什么要returnnil?通常情况下最好是同一种类型。

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

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

presence()

Returns the receiver if it's present otherwise returns nil. object.presence is equivalent to

object.present? ? object : nil

所以你可以这样做:

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