理解will_paginate参数

时间:2012-11-21 16:07:59

标签: ruby-on-rails will-paginate railstutorial.org

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。任何帮助将不胜感激。

1 个答案:

答案 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

  

这到底是做什么的?

我希望上面的回答是这样,但如果没有,也许它为您提供了足够的信息来提出更具体的问题。