2010-12-19 5 views
2

Cette question est une sorte d'extension de Another question, je vais donc l'utiliser comme référence pour cette question. Dire que j'ai un tas de billets que je voudrais aller chercher et trier par nom. C'est assez facile, il suffit de faire:Comment trier et choisir les premiers éléments dans Rails

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

Cependant, est-il un moyen de dire Ticket.find que je ne veux que les premiers billets x? Je parie qu'il y a un moyen de le faire avec SQL direct, et je suis sûr que je pourrais juste prendre @tickets et le raccourcir aux premiers éléments x, mais je préfère le faire d'une manière droite Ruby qui n'acquiert pas tout les tickets (j'ai énormément de "tickets" et je ne veux pas vraiment les avoir tous, ça pourrait coûter beaucoup de temps processeur).

Toute aide est appréciée et merci d'avance!

Répondre

5

Tout ce que vous voulez faire est:

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

x est le nombre d'enregistrements que vous voulez.

Voir the Rails documentation pour plus de conditions que vous pouvez mettre dans votre find. (Recherchez VALID_FIND_OPTIONS.)

+0

Ceci est également couvert dans le guide d'interface de requête: http://guides.rubyonrails.org/active_record_querying.html –

1

Ceci est juste une extension du paramètre 'limit' dans SQL. Par exemple, SELECT * FROM ticket ORDER BY name LIMIT 4. Il est donc disponible dans n'importe quel ORM, y compris ActiveRecord.

1

..et si vous utilisez Rails 3, vous pouvez le faire

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