如何在Rails中排序和选择前几个项目

时间:2010-12-19 04:13:58

标签: sql ruby-on-rails ruby

这个问题是Another question的扩展,所以我会将其作为此问题的基线。

假设我有一堆我希望获取并按名称排序的票证。这很容易,只需:

@tickets = Ticket.find(:all, :order => 'name')

但是,有没有办法告诉Ticket.find我只想要第一张x票?我打赌有一种方法可以用直接的SQL做到这一点,我确信我可以把@tickets缩短到前面的x元素,但我宁愿做一个直接的Ruby方式没有获得所有的门票(我有很多“门票”,我真的不想全部拿到它们,这可能会耗费大量的CPU时间。)

所有帮助都表示赞赏,并提前致谢!

3 个答案:

答案 0 :(得分:5)

您要做的就是:

@tickets = Ticket.find(:all, :order => 'name', :limit => x)

x是您想要的记录数。

有关可以放入find的更多条件,请参阅the Rails documentation。 (搜索VALID_FIND_OPTIONS。)

答案 1 :(得分:1)

这只是SQL中'limit'参数的扩展。例如,SELECT * FROM ticket ORDER BY name LIMIT 4。因此,它可以在任何ORM中使用,包括ActiveRecord。

答案 2 :(得分:1)

..如果您使用的是Rails 3,那么就可以使用它

@tickets = Ticket.order('name').limit(x).all