Выполните итерацию по базе данных и проверьте наличие определенного идентификатора
Я хочу создать метод, который найдет меня и случайную "статью". Дело в том, что я понятия не имею, как перебирать БД, и не получить исключение в случае, если не найден. Как я думаю, что это будет работать (я знаю, что это не рельсовый путь, но у меня нет другой подсказки) Передайте число от Class.first до Class.last, проверьте, существует ли оно (его можно удалить), чем верните объект по рандомизированному идентификатору.
что-то вроде этого:
1.9.3p194 :009 > def test
1.9.3p194 :011?> until Task.exists?(x)
1.9.3p194 :012?> print "hmmmmmm"
1.9.3p194 :013?> x = rand(1..10)
1.9.3p194 :014?> end
1.9.3p194 :015?> end
(Когда этот метод будет работать, будет добавлено больше указанных критериев)
2 ответа
Если вы используете ActiveRecord, вы должны перехватить исключение RecordNotFound и рекурсивно вызвать ваш метод. Для других ORM попробуйте поймать другое исключение.
def ran_find
x = rand(1..100)
Task.find(x)
rescue ActiveRecord::RecordNotFound => e
puts 'hmmmm'
ran_find
end
Не лучшая реализация, поскольку значения x могут встречаться более одного раза. Но это работает.
Людям нравится использовать параметр ActiveRecord:offset для захвата случайной записи, так как он избегает этого исключения RecordNotFound:
Взято от Toby Hede: Случайная запись в ActiveRecord
offset = rand(Model.count)
rand_record = Model.first(:offset => offset)