неопределенный метод `total_pages' для #‹Tuto::ActiveRecord_Relation:0x007fc3b2473d80›

Я нашел пару похожих случаев, но ничего не решило мою проблему...

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

Поскольку я добавил его, исследования терпят неудачу и повторяют эту ошибку undefined method total_pages' for #<Tuto::ActiveRecord_Relation:0x007fc3b2473d80>

У меня есть закрытый метод в моем контроллере Tutos для фильтрации моих tutos

 def filter_tutos
  return if params[:query].blank?
  @tutos = Tuto.search(params[:query][:keyword]).includes(:user, :category) if params[:query][:keyword].present?
  @tutos = Tuto.joins(:user).where('users.nickname LIKE ?', params[:query][:user]) if params[:query][:user].present?
  @tutos = Tuto.joins(:category).where('categories.name LIKE ?', params[:query][:category]) if params[:query][:category].present?
 end

Метод index в контроллере tutos:

  def index
    filter_tutos if params[:query].present?
    @tutos ||= Tuto.all.page params[:page]
  end

на мой взгляд у меня есть:

  .pagination
      = paginate @tutos

Я добавил paginates_per 5 в модель туто


person Community    schedule 07.04.2017    source источник
comment
total_pages — это атрибут объекта Tuto, но метод вызывается для ARel, а не для объекта Tuto. попробуйте преобразовать @tutos в методе index в массив объектов - @tutos = (@tutos || Tuto.all.page params[:page]).to_a   -  person Alok Swain    schedule 07.04.2017
comment
пробовал это тоже до вашего ответа, но это было нехорошо;) но спасибо за помощь   -  person    schedule 07.04.2017


Ответы (1)


Попробуй это. Пагинация не вызывается на @tutos. Если он пуст, то все объекты Tuto разбиты на страницы, но не иначе.

  def index
    filter_tutos if params[:query].present?
    @tutos = @tutos.count > 0 ? @tutos : Tuto.all
    @tutos = @tutos.page params[:page]
  end
person Alok Swain    schedule 07.04.2017
comment
Это помогает :) Я добавил @tutos = Tuto.all, я удостоверюсь, что он работает, и проголосую за ваш ответ, спасибо. - person ; 07.04.2017