Это не должно быть так сложно.
ids = Model.pluck(:id)
random_model = Model.find(ids.sample)
pluck
возвращает массив всех идентификаторов в таблице. Метод sample
в массиве возвращает случайный идентификатор из массива.
Это должно работать хорошо, с равной вероятностью выбора и поддержкой таблиц с удаленными строками. Вы можете даже смешать это с ограничениями.
User.where(favorite_day: "Friday").pluck(:id)
И тем самым выберите случайного пользователя, который любит пятницы, а не просто любого пользователя.