Это работает в Rails 2 + MySQL
class Photos < ActiveRecord::Base
# for MySQL:
named_scope :random, lambda { |n| {:order => "RAND()", :limit => n || 1 }}
# for SQLite and PostgreSQL
named_scope :random, lambda { |n| {:order => "RANDOM()", :limit => n || 1 }}
end
Тогда вы можете сделать что-то вроде
gallery.photos.random[0]
gallery.photos.random
вернет 1 фотографию в случайном порядке, но все равно вернет массив, поэтому вам нужен [0]
для получения первого элемента этого массива. Вы также можете сделать gallery.photos.random.first
.
Если вам нужно более одного случайного изображения, вы можете позвонить gallery.photos.random(10)
, чтобы получить 10 случайных фотографий.