记录并不总是找到

时间:2016-01-29 19:36:19

标签: ruby-on-rails ruby ruby-on-rails-4

考虑以下

# setup an array of the question ids so far
questions_array = []
questions_array.push(session[:questions_array])

# take a random question whom id is not included in the session[:questions_array]
@question = Question.offset(rand(Question.count)).where('id NOT IN (?)',questions_array).take

# push id to array and later on assign the new array to the session
questions_array.push(@question.id)
session[:questions_array] = questions_array

我有两个问题数据库。其中一个返回,另一个给我错误

NoMethodError (undefined method 'id' for nil:NilClass):

此行显示错误questions_array.push(@question.id)

每次都不会发生这种情况!这就是奇怪的事情!

2 个答案:

答案 0 :(得分:2)

这就是你可以解决的问题:

Question
  .where.not(id: questions_array)
  .order('random()')
  .first

但是如果问题表例如说超过10,000条记录,那么它会很慢。然后你可以编写递归程序,它将选择一个随机记录并检查一些条件。如果条件匹配,则返回记录,或者递归将继续以某种基本条件在最坏的情况下中断。

答案 1 :(得分:0)

我的坏似乎问题在于我首先获得一个随机ID,然后检查该ID是否不在数组中,这不是我想要的。因此,如果随机id包含在数组中,则会产生错误,因为没有任何错误。

这是新的代码行。

@question = Question.where('id NOT IN (?)',questions_array).first