Kaminari undefined метод 'page'

Я пытаюсь добавить Kaminari в мое приложение Rails. Я включил драгоценный камень, и вот что выглядит мой контроллер:

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 #

Не уверен, почему это происходит, когда я выполнил шаг docs для шага.

2 ответа

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])


Я бы посоветовал вам немного переписать контроллер. Еще лучше переносите фильтры в модель или в класс фильтра. Загляните в present? для тестирования существования params, поскольку это будет проверять на nil и empty.

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

licensed under cc by-sa 3.0 with attribution.