迭代db,并检查是否存在特定的id

时间:2012-09-06 22:41:46

标签: database ruby-on-rails-3

我想创建一个能找到我的方法和随机的“文章”。问题是我不知道如何遍历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

(当方法适用时,将添加更多指定的标准)

2 个答案:

答案 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 HedeRandom record in ActiveRecord

  

offset = rand(Model.count)

     

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