2

我刚刚开始在我的 Rails 4 应用程序中实现轮胎 gem 和 ElasticSearch。在轮胎宝石主页上,它指出:

Note that Tire search results are fully compatible with WillPaginate and Kaminari, so you can pass all the usual parameters to the search method in the controller:

    @articles = Article.search params[:q], :page => (params[:page] || 1)

我有几乎完全相同的设置:

  @projects = Project.search params[:query], :load => true, :page => (params[:page] || 1)

当我尝试搜索时,我得到:

undefined method `total_pages' for #<ActiveRecord::Relation []>

项目.rb:

  include Tire::Model::Search
  include Tire::Model::Callbacks

  settings :analysis => {
      :filter  => {
          :ngram_filter => {
              :type => "nGram",
              :min_gram => 2,
              :max_gram => 12
          }
      },
      :analyzer => {
          :index_ngram_analyzer => {
              :type  => "custom",
              :tokenizer  => "standard",
              :filter  => ["lowercase", "ngram_filter"]
          },
          :search_ngram_analyzer => {
              :type  => "custom",
              :tokenizer  => "standard",
              :filter  => ["standard", "lowercase", "ngram_filter"]
          }
      }
  } do
    mapping do
      indexes :id, :type => 'integer'
      indexes :title
      indexes :description
    end
  end

如何使用 WillPaginate 正确对搜索结果进行分页?任何帮助表示赞赏。

4

1 回答 1

2

似乎 WillPaginate 和 Kaminari 都与 Rails 4 兼容:

但是,新版本尚未发布到 Rubygems。您必须将 Gemfile 指向 Github 存储库:

# Either:
gem "will_paginate", git: 'https://github.com/mislav/will_paginate.git'
# Or:
gem "kaminari", git: 'https://github.com/amatsuda/kaminari.git'

分页应该工作。如果您想在一个孤立的案例上进行尝试,请使用 Tire 提供的模板生成一个新的 Rails 4 并使用它:

rails new rails4app -m https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb
cd rails4app

# Change articles_controller.rb to:
@articles = Article.tire.search params[:q], page: params[:page]

COUNT=1000 rake db:seed
rails server
于 2013-07-06T16:59:12.403 回答