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...
)。
您只需指定排序顺序,然后根据最小值获取单个记录。 假设你选择id
( created_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) %>