1

我想创建一个可以找到我和随机“文章”的方法。问题是我不知道如何遍历数据库,并且在找不到的情况下不会出现异常。我认为它是如何工作的(我知道它不是轨道方式,但我没有其他线索)从 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

(当该方法工作到此为止时,将添加更多指定的标准)

4

2 回答 2

1

如果您使用 ActiveRecord,则必须捕获 RecordNotFound 异常并递归调用您的方法。对于其他 ORM 尝试捕获其他异常。

def ran_find
  x = rand(1..100)
  Task.find(x)
rescue ActiveRecord::RecordNotFound => e
  puts 'hmmmm'
  ran_find
end

不是最好的实现,因为 x 值可以多次满足。但它有效。

于 2012-09-06T23:29:52.937 回答
1

人们喜欢使用 ActiveRecord :offset 选项来获取随机记录,因为它避免了 RecordNotFound 异常:

取自Toby HedeActiveRecord 中的随机记录

offset = rand(Model.count)

rand_record = Model.first(:offset => offset)

于 2012-09-21T16:15:04.317 回答