2017-05-02 9 views
1

私はRailsの5アプリを開発していますし、一部に私が指定した日付範囲内にあるすべてのオブジェクトを取得したい:日付範囲内のオブジェクトを取得する5

geo_locations.where(:created_at => @[email protected]_at) 

をしかし、場合によっては、first_atまたはlast_atがNULLです。そのうちの1つがNULLの場合、エラーが発生します。

ArgumentError (bad value for range) 

この場合、空の結果が得られます。 first_atとlast_atがNULLの場合、エラーは発生しません。

このエラーを回避するにはどうすればよいですか?

答えて

0

それを行うためのいくつかの方法:

geo_locations.where(:created_at => @[email protected]_at) rescue [] 

OR

return [] unless @ride.first_at && @ride.last_at 
geo_locations.where(:created_at => @[email protected]_at) 

、それは他の未知のエラー/例外を救出のリスクを低減して、私は2番目のオプションをお勧めし

0

明示的には述べられていませんが、ActiveRecord :: Relationを返し値として使用し、配列ではないと仮定します(Md. Farhan Memon's answer)?もしそうなら、ActiveRecord :: NullRelationを使ってActiveRecord::QueryMethods#noneを使ってこれを達成することができます。

if @ride.first_at && @ride.last_at 
    geo_locations.where(created_at: @[email protected]_at) 
else 
    geo_locations.none 
end 

このようにして、このクエリを実行すると、空の結果が返されます。また、クエリは条件付きで取られるブランチに関係なく、実行前にActiveRecord :: Relationとして連鎖可能なままです。戻り値の型が一貫しているので、いいですね!

関連する問題