Ruby on rails 为什么这个代码可以工作?Rails 4,使用视图中的嵌套属性记录迭代

Ruby on rails 为什么这个代码可以工作?Rails 4,使用视图中的嵌套属性记录迭代,ruby-on-rails,Ruby On Rails,其他人帮我写了这个代码 它工作得很好,但我正试图弄清楚为什么这段代码会这样工作 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 @questi

其他人帮我写了这个代码

它工作得很好,但我正试图弄清楚为什么这段代码会这样工作

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
在“显示”视图中:

<%= @question.content %>

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

@问题(id)%>
据我所知,它根据测验id获取
@quick.questions
,并按升序(即1、2、3)分配给
@questions
。接下来,它进入if-else块并将@question指定给视图中呈现的第一个问题

接下来,在视图中单击链接时,它会提交
@quick.id
@question.id=params[min_id:“1”]
,因为显示的问题的当前id是1。将鼠标悬停在显示
http://localhost:3000/quizzes/1?min_id=1

params[:mind_id=1]
然后被分配给@min_id,并在if块中使用,以从id=1的@questions中获取第一条记录

这就是我困惑的地方。在第二次渲染中,单击链接后,将显示
http://localhost:3000/quizzes/1?min_id=1
在地址栏中,为什么为
@questions.id=2
呈现@question.content?不是应该是1吗?这个逻辑对我来说似乎是循环的,而且似乎这个代码甚至不应该正常工作


我错过了什么?为什么点击链接时id=1,然后id=2是正确的?

如果我读的是正确的,
min\u id
就像分页一样被用来获取下一个问题。(这里用词不当。)

所以这是你的问题(erm)关于另一个回答(呃)的
“id>?”
,回来困扰你

步骤:

  • 获取本次测验的问题,并向我展示第一个(第一次通过,这确实是第一个顺序问题)

  • 显示指向同一测验的“下一个问题”链接,将查询字符串中的当前问题id作为
    min\u id

  • 单击链接后,
    min\u id
    现在出现,用于获取下一个问题,方法是检索属于此测验的所有问题,其id大于上一个问题(
    min\u id
    值),并从记录集中选择
    第一个
    问题。(这是因为问题之前是按id升序排列的。)

听起来对吗


(根据您的评论,我认为您对SQL查询参数转义很熟悉:)

我对“问题”这个词已经没有任何意义了。啊哈,好吧,这完全有意义。所以
id>?
毕竟是我困惑的地方。它抓取所有ID大于从链接传入的ID的问题,并分配第一个问题。好的,明白了!非常感谢。