这个问题是Another question的扩展,所以我会将其作为此问题的基线。
假设我有一堆我希望获取并按名称排序的票证。这很容易,只需:
@tickets = Ticket.find(:all, :order => 'name')
但是,有没有办法告诉Ticket.find我只想要第一张x票?我打赌有一种方法可以用直接的SQL做到这一点,我确信我可以把@tickets
缩短到前面的x元素,但我宁愿做一个直接的Ruby方式没有获得所有的门票(我有很多“门票”,我真的不想全部拿到它们,这可能会耗费大量的CPU时间。)
所有帮助都表示赞赏,并提前致谢!
答案 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