[英]will paginate, nested routes, ruby, rails
我正在嘗試將分頁鏈接到我的嵌套路由,而不是常規的post變量。 我知道我應該通過一些參數進行分頁,但是我不知道如何通過它們。
基本上,有一個數組存儲在@posts
,另一個分頁可以訪問的參數是category_id
。
嵌套的路由是/category/1/posts
但點擊下一個和上一個將進行分頁,返回的URL類似於此posts?page=1&category_id=7
。
<%= will_paginate @most_recent_posts "What do I do here?" %>
這是Yannis回答的結果:
在您的控制器中,您可以執行以下操作:
@posts = @category.posts.paginate
在您看來:
<%= will_paginate(@post) %>
為此,請使用以下網址
posts?page=2&post_category_id=athlete_management
route.rb#還有更多路線,但是這些是相關的
map.resources :posts
map.resources :post_categories, :has_many => :posts
map.resources :post_categories do |post_category|
post_category.resources :posts
end
map.resources :posts
必須在塊之后聲明資源
謝謝斯蒂芬!
在這個舊問題上跳傘是因為我遇到了同樣的問題。
我遇到了幾乎完全相同的問題。 我聽從了響應者的建議,這條路線上有些時髦。 我研究了路線,發現(翻譯成適合您的情況):
resources :posts
resources :categories do
resources :posts
end
這樣可以使category_posts_path
調用返回(按預期方式) /category/1/posts
。
但是,認識到will_paginate
調用類似於url_for
東西是至關重要的, url_for
從路由“向后”工作以找到與參數匹配的第一條路由。
由於resources :posts
出現在嵌套路由的上方,因此可以看到滿足條件,只插入category_id=1
是一個查詢字符串。
它對其他所有人“開箱即用”的原因是,因為他們沒有將嵌套資源單獨列出為獨立資源。
刪除它,你應該沒事!
在您的控制器中,您可以執行以下操作:
@posts = @category.posts.paginate
在您看來:
<%= will_paginate(@post) %>
好的,因此從問題中無法確切得知,但我假設您正在嘗試從/posts
類的根目錄URL進入/category/1/posts
特定類別的頁面。
我之所以認為這是因為我有嵌套的路由(甚至在名稱空間中),其中will_paginate可以正常工作而沒有任何特殊參數。 如果不是這種情況,那么您的路線可能還有其他時髦的事情,因此需要更多信息來進行調試。
但是我至少可以解釋will_paginate的工作原理。 生成頁面URL時,它將使用現有參數加上所需的特定頁面調用url_for
。 因此,如果您已經設置了一堆參數,它應該保留它們,包括那些屬於路徑本身的參數。 幸運的是,它還允許您將其他參數與(surprise!) :params
參數合並到will_paginate中。
現在,假設您已正確設置了嵌套路由,則可以通過以下方式生成/category/1/posts
:
url_for(:controller => 'posts',
:category_id => '1')
但是,如果您在頁面/posts
則參數只會是:
{:controller => 'posts'}
因此,您需要像這樣將category_id傳遞給will_paginate:
<%= will_paginate @posts, :params => {:category_id => @posts.first.category_id} %>
如果這不起作用,那么我懷疑您的路線有問題。 嘗試將調試語句放入模板中,並使用不同的參數排列調用url_for
。 請記住,路線定義順序很重要,可能會造成沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.