Total Rails noob,正在使用Rails教程视频。我一直到最后一课,有些事我不明白:
@users = @user.followed_users.paginate(page: params[:page])
具体来说,我没有跟踪的位是paginate(page: params[:page])
。我看了paginate docs,我知道paginate方法可以使用三个参数,:page
就是其中之一。我认为这个参数意味着“当前页面”,但是will_paginate文档说默认为1。
我也知道(认为)params[:page]
指的是内置的Rails参数哈希,意思是当前会话参数。正确?
所以...我不明白。我为什么需要它? :page
符号如何进入params
哈希?这真的是什么?
有关其他背景信息,请参阅Ruby Tutorial book上的清单11.30。任何帮助将不胜感激。
答案 0 :(得分:3)
我认为你可能会误解的是Ruby参数在这种情况下是如何工作的。 paginate
实际上并不接受3个参数,而是采用带有三个选项(键/值对)的单个散列参数。
在Ruby中,当您将键/值对作为最后一组参数传递时,它们会自动转换为哈希值。例如,以下内容是等效的:
paginate({page: 1})
与:
相同paginate(page: 1)
所以你真正在做的是传递一个参数,这是一个具有多个键/值对的哈希。
现在专门回答你的问题:
为什么需要它?
您需要传递此值,以便will_paginate知道您当前所在的页面。默认为第一页,因为在初始页面加载时,您的网址中不会有?page=x
。更改为其他页面后,它会从URL中获取page
值并将其传递给paginate方法。
:页面符号如何进入params哈希?
作为URL中查询参数的一部分的任何参数将自动传递给Rails的params散列(更可能是构建在Rails上的Rack)
这到底是做什么的?
我希望上面的回答是这样,但如果没有,也许它为您提供了足够的信息来提出更具体的问题。