Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从视图中调用下一个ActiveRecord项_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 如何从视图中调用下一个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 我的视图一次显示一个问题,我不想重复任何问题,这就是为什么我要将它们从数组中拉出,但我

我正在一个展示多项选择题的网站上工作。用户可以添加新问题。我想通过按钮调用下一个问题,因此我需要该按钮使用下一个ActiveRecord项更新页面

我的控制器:

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=[]
它实际上不是一个空值,而是一个空数组。