2009-12-17 5 views
0

Je génère donc des données XML dans mon application RoR pour une source externe à consommer. La méthode dans mon contrôleur est la suivante ...Commande de données XML générées aléatoirement à partir de RoR

def allOffers 
@ridesall = Ride.find(:all) 
respond_to do |format| 
    format.xml  
end 
end 

J'ai un fichier allOffers.xml.builder qui ressemble à ceci ...

xml.instruct! 
xml.rides do 
@ridesall.each do |ride| 
    xml.item("togive" => ride.togive, "totake" => ride.totake, "howlong" => ride.howlong, "isoffer" => ride.isoffer, "id" => ride.id, "contact" => ride.contact) 
    end 
end 

Cela fonctionne très bien sauf pour une chose .. .it commande le XML basé sur l'ID. Comment puis-je obtenir le xml à commander au hasard?

Puis-je changer simplement

@ridesall = Ride.find(:all) 

à

@ridesall = Ride.find(:all, :order => :random) 

?

Merci

Répondre

1

Quelle base de données utilisez-vous? Vous devrez probablement compter sur une fonction aléatoire spécifique au SGBDR. Par exemple, dans mysql

:order => 'rand()' 

ou postgresql

:order => 'random()' 
1

Vous pouvez mélanger le tableau lui-même. Cela fonctionnera pour n'importe quel type de base de données.

@ridesall.shuffle.each do 
    #... 
end 

Note: Array#shuffle est nouveau à 1.8.7, si require 'backports' si vous utilisez Ruby 1.8.6.

0

@ridesall.sort_by { |x| rand() } fonctionne aussi

Questions connexes