考虑以下
# 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)
每次都不会发生这种情况!这就是奇怪的事情!
答案 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