如何在rails中为Searchkick解决未定义的方法`paginate'?

时间:2015-12-05 16:21:41

标签: ruby-on-rails ruby elasticsearch pagination searchkick

我正在尝试使用searchkick gem自动完成,但我收到此错误 #的未定义方法`paginate' 这是我的post_controller.rb文件

class PostsController < ApplicationController
  impressionist
  before_action :set_post, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]
  def index
  @email = current_user.try(:email)
  if params[:category].blank?
    @posts = Post.search(params[:query]).paginate(page: params[:page], per_page: 10)
  else
    @category_id = Category.find_by(name: params[:category]).id
    @posts = Post.where(category_id: @category_id).paginate(page: params[:page], per_page: 10)
  end
  end
  def show
  end
  def new
    @post = current_user.posts.build
  end
  def edit
  end
  def create
    @post = current_user.posts.build(post_params)

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render :show, status: :created, location: @post }
      else
        format.html { render :new }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end
  def update
    respond_to do |format|
      if @post.update(post_params)
        format.html { redirect_to @post, notice: 'Post was successfully updated.' }
        format.json { render :show, status: :ok, location: @post }
      else
        format.html { render :edit }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end
  def destroy
    @post.destroy
    respond_to do |format|
      format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' }
      format.json { head :no_content }
    end
  end
  private
    def set_post
      @post = Post.find(params[:id])
      @comments = @post.comments.all
      @comment = @post.comments.build
    end
    def post_params
      params.require(:post).permit(:title, :description, :video, :category_id)
    end
    def video
      self.link.split('/').last if self.link
    end
    def autocomplete
      render json: Post.search(params[:query], autocomplete: true, limit: 10).map(&:title)
    end
end

和post.rb文件是

class Post < ActiveRecord::Base
	is_impressionable
	has_many :comments
	belongs_to :category
	belongs_to :user
	searchkick autocomplete: ["title"]
end

并且index.html.erb文件是

<%- model_class = Post -%>
<% @title="Know Your Operating System-posts" %>
<div class="page-header">
  <h1>Tips And Tricks For Your Operating System<small></small></h1>
</div>
<%= form_tag posts_path, class: "form-inline", method: :get do %>
  <div class="input-group input-group-lg">
    <% if params[:query].present? %>
      <div class="input-group-btn">
        <%= link_to "clear", posts_path, class: "btn btn-default" %>
      </div>
    <% end %>
    <%= text_field_tag :query, params[:query], class: "form-control", id: "post_search", autocomplete: "off" %>
    <div class="input-group-btn">
      <%= submit_tag "Search", class: "btn btn-primary" %>
    </div>
  </div>
<% end %>
<table class="table table-striped">
  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= link_to post.title, post_path(post) %></td>
          <td>
            <% if current_user.try(:email) == 'kowshik16.kk@gmail.com' || current_user.try(:email) == 'chaitanyamalineni488@gmail.com' || current_user.try(:email) == 'harikirandev@gmail.com' || current_user.try(:email) == 'bobbasai33@gmail.com' || current_user.try(:email) == 'sreevaishu15@gmail.com' %>
              <%= post.impressionist_count %>
            <% end %>
          </td>
        <td>
          <% if post.user == current_user %>
          <%= link_to t('.edit', :default => t("helpers.links.edit")),
                      edit_post_path(post), :class => 'btn btn-default btn-xs' %>
          <%= link_to t('.destroy', :default => t("helpers.links.destroy")),
                      post_path(post),
                      :method => :delete,
                      :data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) },
                      :class => 'btn btn-xs btn-danger' %>
          <% end %>
        </td>
      </tr>
    <% end %>
  </tbody>
</table>
<table>
  <tbody>
      <tr>
        <td>
          <%= will_paginate @posts, inner_window: 2, outer_windows: 2 %>
        </td>
      </tr>
  </tbody>
</table>

这是我的宝石文件

source 'https://rubygems.org'
ruby "2.2.2"
gem 'rails', '4.2.1'
group :production do
  gem 'pg'
  gem 'rails_12factor'
end
gem 'searchkick'
gem 'impressionist'
gem 'mysql2'
gem "therubyracer"
gem "less-rails" 
gem 'sass-rails'
gem 'uglifier'
gem 'coffee-rails'
gem "twitter-bootstrap-rails"
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'devise'
gem 'will_paginate'
gem 'mail_form', '~> 1.5', '>= 1.5.1'
gem 'simple_form'
gem 'ckeditor'
gem 'carrierwave'
gem 'mini_magick'
gem 'activeadmin', github: 'gregbell/active_admin'
group :development, :test do
  gem 'byebug'
  gem 'web-console'
  gem 'spring'
end

如何解决错误

1 个答案:

答案 0 :(得分:0)

@guestbooks = Kaminari.paginate_array(Guestbook.all).page(params[:page]).per(5) 的第8行,更改

posts_controller

为:

@posts = Post.search(params[:query]).paginate(page: params[:page], per_page: 10)

Searckick在@posts = Post.search(params[:query], page: params[:page], per_page: 10) 方法中已经built-in support for will_paginate