2014-01-30 80 views
4

我想添加Kaminari到我的Rails應用程序。我已經包括創業板,這是我的控制器是什麼樣子:kaminari undefined方法'頁'

def index 
    if params[:year] 
     if params[:year].size > 0 
     @songs = Song.where("year like ?", params[:year]).page(params[:page]) 
     elsif params[:artist].size > 0 
     @songs = Song.where("artist_name like ?", params[:artist]).page(params[:page]) 
     elsif params[:song].size > 0 
     @songs = Song.where("title like ?", params[:song]).page(params[:page]) 
     end 
    else 
     @songs = Song.first(10).page(params[:page]) 
    end 
    end 

,然後加入

<%= paginate @songs %> 
在我看來

,我得到的錯誤是:

undefined method `page' for #<Array:0x007fab0455b4a8> 

不當然,爲什麼會出現這種情況,因爲我按照文檔步驟進行了操作。

回答

18

Kaminari使用paginate_array來分頁數組。 2個解決方案:

首先,你可以使用limit(10)代替first(10)

@songs = Song.limit(10).page(params[:page])

二,使用paginate_array

@songs = Kaminari.paginate_array(Song.first(10)).page(params[:page])

+0

這種結構的方式關注我:paginate_array是否對已解析的查詢操作? – allanberry

2

我建議你稍微重寫你的控制器。更好的是,將你的過濾器移動到模型或過濾器類。看看present?測試是否存在params,因爲這將檢查nilempty

def index 
    @songs = Song 

    @songs = @songs.where("year like ?", params[:year])   if params[:year] 
    @songs = @songs.where("artist_name like ?", params[:artist]) if params[:artist] 
    @songs = @songs.where("title like ?", params[:song])   if params[:song] 

    @songs = @songs.limit(10).page(params[:page]) 
end