2012-11-21 41 views
1

總Rails noob,通過Rails教程視頻工作。我一路的最後一課,有件事情我不明白:瞭解will_paginate參數

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

具體來說,我不跟蹤對位是paginate(page: params[:page])。我看了一下paginate docs,我知道分頁方法可以用三個參數,:page就是其中之一。我認爲這個參數的意思是「當前頁面」,但will_paginate文檔說它默認爲1.

我也知道(認爲)params[:page]是指內置的Rails參數散列,意思是當前會話參數。對?

所以...我不明白。我爲什麼需要它? :page符號如何進入params散列?這真的是做什麼?

有關其他上下文,請參閱Ruby Tutorial book上的列表11.30。任何幫助將非常感激。

回答

3

我想你可能會誤解的是Ruby的論點在這種情況下的工作原理。 paginate實際上不帶3個參數,而是帶有三個選項(鍵/值對)的單個散列參數。

在Ruby中,當您將鍵/值對作爲最後一組參數傳遞時,它們會自動轉換爲散列。例如,下面的是等價的:

paginate({page: 1}) 

是一樣的:

paginate(page: 1) 

所以真的是你正在做的是傳遞一個參數,它是一個具有多個鍵/值對的哈希。

現在具體回答你的問題:

爲什麼需要它?

您需要傳遞此值,以便will_paginate知道您當前處於哪個頁面。它默認爲第一頁,因爲在初始頁面加載時,您的URL中不會有?page=x。在更改爲其他頁面後,它會從URL中獲取page值,並將其傳遞給paginate方法。

頁面符號如何進入params散列?

的任何說法,是在URL中的查詢參數的部分將得到由Rails的自動傳遞到params哈希表

這究竟是什麼做的(更可能Rack這Rails是一個在建)?

我希望上面的回答,但如果不是,也許它提供了足夠的信息來提出一個更具體的問題。

+0

非常感謝!這絕對有幫助。 – ezuk