我想知道是否有办法收紧这个问题:
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)
答案 0 :(得分:4)
您正在使用find_by_sql
,因此可能您使用的是Rails或者可以使用ActiveSupport。在这种情况下,您可以使用presence
:
<强>存在()强>
如果接收器存在则返回接收器,否则返回
nil
。object.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?}