Rails 4,使用Model.where(related_model_id:1)检索了许多记录,如何在单个视图中显示每个记录?

好的,所以我正在进行测验,作为我的应用程序的一部分。 我有三个嵌套模型测验,问题,答案。

class Quiz  lambda { |a| a[:content].blank? }, allow_destroy: true end class Question  lambda { |a| a[:content].blank? }, allow_destroy: true end class Answer < ActiveRecord::Base belongs_to :question end 

在控制器动作测验中#show我可以检索特定测验的所有问题

  def show @quiz = Quiz.find(params[:id]) @question = Question.where(quiz_id: @quiz) end 

我可以在quizzes / show.html.haml视图中显示每个问题

 - @question.each do |question| = question.content 

问题是上面的代码会在同一页面上显示所有问题。

我真正想要的是在每个问题中单独显示每个问题,每页一个问题。 因此,一旦用户回答了一个问题,他们就会点击一个按钮,它将使用下一个问题重新呈现视图。

无论如何,我有一段时间试图弄清楚如何做到这一点。 先感谢您! 哦,如果您需要查看我的代码,请告诉我!

首先:你已经建立了一个关联( has_many :questions ),所以你可以使用@quiz.questions而不是手动搜索( Question.where... )。

您只需指定排序顺序,然后根据最小值获取单个记录。 假设你选择idcreated_at或任何自定义字段应该以类似的方式工作)。

 def show @min_id = params[:min_id] @quiz = Quiz.find(params[:id]) @questions = @quiz.questions.order("id ASC") if @min_id @question = @questions.where("id > ?", @min_id).first else @question = @questions.first end end 

然后,您可以在下一个问题的链接中添加当前问题ID。 可能是这样的(erb而不是haml,但你明白了;)):

 <%= @question.content %> <%= link_to "Next question", quiz_path(@quiz, :min_id => @question.id) %>