Rails 6
As stated by Jason in the comments, in Rails 6, non-attribute arguments are not allowed. You must wrap the value in an Arel.sql()
statement.
Model.order(Arel.sql('RANDOM()')).first
Rails 5, 4
In Rails 4 and 5, using Postgresql or SQLite, using RANDOM()
:
Model.order('RANDOM()').first
Presumably the same would work for MySQL with RAND()
Model.order('RAND()').first
This is about 2.5 times faster than the approach in the accepted answer.
Caveat: This is slow for large datasets with millions of records, so you might want to add a limit
clause.