In teoria ActiveRecord dovrebbe fungere da astrazione, ed cos infatti
nella maggior parte dei casi.
Se sei un neofita ti direi di non preoccuparti troppo della tipologia di
database sottostante, ma ti sei reso conto da solo che ci sono delle
differenze tra i vari database che possono uscire fuori.
Spesso sono evidenti come in questo caso, in altre situazioni sono meno
evidenti e ti possono far perdere tempo con bug e comportamenti
inaspettati.
Pi complesso il progetto, pi di frequente avrai bisogno di allontanarti
dalle funzionalit di ActiveRecord per fare delle query a mano o usare
feature particolari del database.
Nel caso specifico direi che la soluzione va pi che bene, mi hai fatto
ricordare del parametro :offset che non uso tanto spesso.
Alberto, la tua query mi pare la migliore perché funziona bene anche con
tanti record, ma è un peccato dover passare per la select count.
Il mio consiglio è usare lo stesso database sia in sviluppo che in
produzione. Usandone due diversi prima o poi accadrà un guaio, se non
hai anche un sistema di test con lo stesso db di produzione.
ActiveRecord astrae bene sui db ed Heroku contribuisce a nascondere il
database, però ti esponi a tutti i bug di AR che dipendono dal db
sottostante (ce ne sono stati, ce ne saranno) e soprattutto alle
differenti opinioni dei due db sui risultati di certe query (trattamento
dei null, date, unique values nelle transazioni, etc). In parole povere,
i tuoi test che passano su mysql potrebbero non passare su postgresql e
viceversa.
Con lo stesso database oltre a dormire più tranquillo potrai usare la
RANDOM() di postgresql che mi aspetto produca una query più veloce della
combinazione delle due che usi adesso, ma va verificato.