我想创建一个能找到我的方法和随机的“文章”。问题是我不知道如何遍历db,而不是在未找到的情况下获得异常。 我怎么认为它会起作用(我知道它不是轨道方式,但我没有其他线索)从Class.first到Class.last检查它是否存在(可以删除)而不是返回对象由随机的id。
类似的东西:
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
(当方法适用时,将添加更多指定的标准)
答案 0 :(得分:1)
如果使用ActiveRecord,则必须捕获RecordNotFound异常并以递归方式调用方法。对于其他ORM,尝试捕获其他异常。
def ran_find
x = rand(1..100)
Task.find(x)
rescue ActiveRecord::RecordNotFound => e
puts 'hmmmm'
ran_find
end
不是最佳实现,因为x值可以满足多次。 但它确实有效。
答案 1 :(得分:1)
人们喜欢使用ActiveRecord:offset选项来获取随机记录,因为它避免了这个RecordNotFound异常:
取自Toby Hede: Random record in ActiveRecord
offset = rand(Model.count)
rand_record = Model.first(:offset => offset)