根据计算结果选择行

时间:2013-06-03 13:48:47

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

我需要在数据库中选择3个移动最快的事件。我通过减去(game_start - game_current)得到最快的移动并取其绝对值。

这是我想要做的。显然不是正确的语法,只是为了让你了解我想要做的事情。

@fast_moving = Event.where("(ABS(game_start - game_current)) > ?", 3)[0..2]

谢谢!

1 个答案:

答案 0 :(得分:1)

你几乎就在那里!

Event.where("(ABS(game_start) - ABS(game_current)) > ?", 3).limit(3)

.limit(3)将结果限制为仅在db级别上的3个结果。

你可以制作一个范围:

class Event < ActiveRecord::Base
  scope :moving_fast, lambda { |duration| 
                        where("(ABS(game_start) - ABS(game_current)) > ?", duration || 3) }

并像这样使用它:

@fast_events = Event.moving_fast.limit(3)
# or
@fast_events = Event.moving_fast(5)

(您可以将duration参数传递给范围)