2010-09-08 9 views
0

Est-ce que quelqu'un sait comment je pourrais afficher une liste de 4 utilisateurs aléatoires dans RoR.RoR aléatoire quatre utilisateurs

Je sais qu'il existe la méthode rand(), mais je devrais l'appliquer à un tableau en quelque sorte.

Répondre

2

Si la table ne contient pas trop d'entrées suivantes retournera quatre utilisateurs choisis au hasard:

User.find(:all, :order => 'RANDOM()', :limit => 4) 

Toutefois, cela n'échelle puisqu'il randomizes la table entière . Pour les tables avec beaucoup de colonnes cela peut être très important.

Une autre méthode consiste à randomiser uniquement le id puis de sélectionner uniquement ces lignes. Quelque chose le long des lignes de:

# Return an array of ids randomly drawn from User 
ids = ActiveRecord::Base.connection.select_values(
     User.send(:construct_finder_sql, { :select => 'id', 
              :order => 'RANDOM()', 
              :limit => 4 
             })) 

# Return the users drawn from above 
users = User.find(:all, :conditions => "id IN (#{ids.join(',')})") 

Si vous allez avec cela, j'intégrerait comme une méthode de classe de User.

+0

Voici ce que j'ai obtenu: SQLite3 :: SQLException: pas de telle fonction: rand: – Brian

+0

Pour SQLite, la fonction est 'RANDOM()'. – rjk