will_paginate 搜索时出错

will_paginate giving an error when doing a search

好的,所以我在这里以及其他地方反复搜索,但尚未找到与我相关的解决方案。可能是因为之前的问题都是前段时间的吧。

我的问题是我先添加了分页,然后我被要求添加一个搜索,以便用户可以搜索产品。当他们进行搜索时,应该只是打开产品页面。如果我取出搜索,分页不会给我错误。

我现在得到的错误是

''undefined method `total_pages' for # Product::ActiveRecord_Relation:''

并且为错误突出显示的代码行是 index.html.erb 中的分页。

我错过了什么?感谢任何指导,这个新手需要它!

这是products_controller:

  def index
   if Rails.env == "development"
    name_env = "name LIKE ?"
   else
    name_env = "name ilike ?"
   end
   if params[:q]
    search_term = params[:q]
    @products = Product.search(search_term)
   else
    @products = Product.all
    @products = Product.paginate(:page => params[:page], per_page: 4)
   end
  end

这是 index.html.erb :

  <div class="pagination">
   <%= will_paginate @products %>
  </div>

你搜索的时候漏了paginate方法,@products = Product.search(search_term)会是这样

.....
if params[:q]
    search_term = params[:q]
    @products = Product.search(search_term).paginate(:page => params[:page], per_page: 4)
else
    @products = Product.all.paginate(:page => params[:page], per_page: 4)
.....

另外删除这个@products = Product.all不需要这个。

毕竟,你只是粘贴这个而不是你的代码,它减少了

def index
   if Rails.env == "development"
    name_env = "name LIKE ?"
   else
    name_env = "name ilike ?"
   end
   if params[:q]
    search_term = params[:q]
    @products = Product.search(search_term)
   else
    @products = Product.all
   end
   @products = @products.paginate(:page => params[:page], per_page: 4)
end

修改索引动作如下:

def index
    if Rails.env == "development"
        name_env = "name LIKE ?"
    else
        name_env = "name ilike ?"
    end
    @products = params[:q] ? Product.search(params[:q]) : Product.scoped
    @products.paginate(:page => params[:page], per_page: 4)
end

您也应该使用 paginate 进行搜索。