1

Total Rails 菜鸟,学习 Rails 教程视频。我一直到最后一节课,还有一些我不明白的地方:

@users = @user.followed_users.paginate(page: params[:page])

具体来说,我没有跟踪的是paginate(page: params[:page]). 我查看了分页文档,我知道分页方法可以采用三个参数,:page其中之一。我认为这个参数的意思是“当前页面”,但是 will_paginate 文档说它默认为 1。

我也知道(认为)params[:page]指的是内置的 Rails 参数哈希,意思是当前会话参数。对?

所以...我不明白。为什么我需要它?符号是如何:page进入params散列的?这真的有什么作用?

有关其他上下文,请参阅Ruby 教程一书中的清单 11.30 。任何帮助将非常感激。

4

1 回答 1

3

我认为您可能误解的是 Ruby 参数在这种情况下是如何工作的。paginate实际上并不需要 3 个参数,而是需要一个带有三个选项(键/值对)的哈希参数。

在 Ruby 中,当您将键/值对作为最后一组参数传递时,它们会自动转换为哈希。例如,以下是等价的:

paginate({page: 1})

是相同的:

paginate(page: 1)

所以实际上你正在做的是传递一个参数,它是一个具有多个键/值对的散列。

现在专门回答你的问题:

为什么我需要它?

您需要传入此值,以便 will_paginate 知道您当前在哪个页面上。它默认为第一页,因为在初始页面加载时,您?page=x的 URL 中没有。切换到不同的页面后,它会page从 URL 中获取值并将其传递给 paginate 方法。

:page 符号如何进入 params 哈希?

作为 URL 中查询参数一部分的任何参数都将被 Rails 自动传递给 params 哈希(更可能是 Rails 构建的Rack )

这真的有什么作用?

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

于 2012-11-21T16:27:42.570 回答