2011-09-06 126 views
0

我有如下表:將與多個表分頁

  1. 用戶
  2. 賬戶(用戶HAS_ONE帳戶)
  3. 圖片(用戶的has_many圖片)

我想顯示用戶以及相關的帳戶和圖片。這是一個典型的N + 1查詢問題,我使用eager loading解決了這個問題。我想使用will_paginate寶石。我如何將這種急切的加載機制包含進will_paginate

我在這裏發現了一個類似的問題:Using will_paginate with multiple models (Rails)。但答案中的鏈接不合適,答案本身就很古老。此外,它使用原始的sql查詢,我不喜歡。

我想要的輸出如下:

user.name account.field1 account.field2 picture.count 
abc1  abcf1   abcf2   4 
zxc  zxcf1   zxcf2   7 

所以基本上,當我做user.name,也不會執行查詢,但只得到來自變量的數據; 同樣的方式當我做user.account.field1它應該從變量中獲取它並且不執行查詢。

+0

您鏈接到的問題和您自己的問題看起來有所不同。關於該問題的OP想要列出同一列表中的兩種不同型號。這不是你想要做的,對吧? – Swanand

+0

或者你想分頁'user.pictures'列表? – Swanand

+0

你是絕對正確的..問題是有點不同。 –

回答

1

我終於在一個數組上使用了分頁而不是gem本身。

current_page = Integer(params[:page]||1) 
    per_page = 250 
    @users_r = User.all(:conditions=>"some condition",:limit=>per_page,:offset=>per_page*(current_page-1),:include=>[:account,:user_info ,:pictures]) 
    count = @users_r.length 
    @users = WillPaginate::Collection.create(current_page, per_page, count) do |user| 
     user.replace(@users_r) 
    end 
    @users.paginate(params) 
4

paginate方法類似於all方法。所以,你可以簡單地這樣做:

User.includes(:account, :pictures).paginate(
    :page => params[:page], :per_page => 30) 

OR

User.paginate(:include=> [:account, :pictures], 
    :page => params[:page], :per_page => 30) 

注:

will_paginate寶石提供了關於Array類的便捷方法爲分頁:

[1,2,3,4].paginate(:page => 1, :per_page=>2) 
+0

感謝您的信息..將嘗試新的寶石 –