24 Nov
Rails: usare il RAND() con database diversi da MySQL
Usare il RAND() nell’order di ActiveRecord è comodo in quanto si sfrutta una funzione di SQL per restituire i record ordinati randomicamente.
Se però usate Postgres o SQlite come database si genera un errore in quanto questi ultimi non usano la funzione RAND() ma RANDOM().
Per ovviare al problema potete definire un simbolo :random che all’occorrenza diventa RAND() o RANDOM().
1 2 3 4 if order.class == Symbol 5 case order 6 when :random then "RANDOM()" 7 else order.to_s 8 end 9 else 10 order 11 end 12 end 13 end 14 end 15 16 17 18 19 if order.class == Symbol 20 case order 21 when :random then "RAND()" 22 else order.to_s 23 end 24 else 25 order 26 end 27 end 28 end 29 end
A questo punto nella vostra query potete sostituire:
1 Model.find(:all, :order => "RAND()")
con questa:
1 Model.find(:all, :order => :random)
dove :random sarà RAND() quando usate MySQL e RANDOM() negli altri casi.


Grazie Duccio, veramente utile !