Как указывает выше KandadaBoggu, получение всех записей User
из базы данных неэффективно, когда вам нужно только 20. Я бы предложил использовать RAND()
функцию *1003* MySQL для выполнения рандомизации до вы вернетесь из базы данных.Вы все еще можете передать начальное значение в RAND()
, чтобы убедиться, что перемешивание происходит только один раз за сеанс.
Например:
class User < ActiveRecord::Base
def self.randomized(seed = nil)
seed = seed.to_i rescue 0
order("RAND(#{seed})")
end
end
class UsersController < ApplicationController
before_filter :set_random_seed
def index
@users = User.randomized(session[:seed]).page(params[:page]).per(20)
end
private
def set_random_seed
session[:seed] ||= Random.new_seed
end
end
У меня нет установки MySQL для тестированияпротив, но это должно работать лучше, чем ваш исходный код.