Ruby on rails 如何从视图中调用下一个ActiveRecord项
我正在一个展示多项选择题的网站上工作。用户可以添加新问题。我想通过按钮调用下一个问题,因此我需要该按钮使用下一个ActiveRecord项更新页面 我的控制器:Ruby on rails 如何从视图中调用下一个ActiveRecord项,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在一个展示多项选择题的网站上工作。用户可以添加新问题。我想通过按钮调用下一个问题,因此我需要该按钮使用下一个ActiveRecord项更新页面 我的控制器: def practice shuffled_questions = Array.new(Question.ids).shuffle @question = Question.find(shuffled_questions.pop) end 我的视图一次显示一个问题,我不想重复任何问题,这就是为什么我要将它们从数组中拉出,但我
def practice
shuffled_questions = Array.new(Question.ids).shuffle
@question = Question.find(shuffled_questions.pop)
end
我的视图一次显示一个问题,我不想重复任何问题,这就是为什么我要将它们从数组中拉出,但我不知道如何使用视图中数组中的下一个id更新@question
我的第一个想法是使用AJAX或OnClick函数更新页面,但这似乎不起作用
我读过其他人更新他们的模型和控制器以获取下一个ActiveRecord项目,我看到了他们在做什么,例如,但这并没有帮助我理解如何从视图调用更新
非常感谢你的帮助 在这一行中:
shuffled_questions = Array.new(Question.ids).shuffle
正如@Tamer Shlash所指出的,您正在创建一个新的数组,并在每次启动practice
操作时将其洗牌
你可以试试这个:
def practice
@shuffled_questions = Array.new(Question.ids).shuffle if @shuffled_questions.empty?
@question = Question.find(@shuffled_questions.pop)
end
现在,当您调用
practice
操作时,如果@shuffled_questions
为空,它将创建一个新数组并将其洗牌,否则它将保留洗牌问题数组,并且您可以根据需要获得下一个问题。对于每个请求,再次执行控制器操作,并重新创建shuffled_questions
数组。因此,@question
不会在请求间持久化(甚至不会在AJAX请求间持久化)。Amr,您非常接近,但并不完全正确,尽管您引导我找到了正确的答案。我需要的代码实际上是@shuffled\u questions=Array.new(Question.ids).shuffle if@shuffled\u questions.count==0
,因为当@shuffled\u questions=[]
它实际上不是一个空值,而是一个空数组。