【问题标题】:How to solve undefined method `paginate' for Searchkick in rails?如何解决 Rails 中 Searchkick 的未定义方法“分页”?
【发布时间】:2016-03-10 12:47:25
【问题描述】:

我正在尝试将自动完成功能与 searchkick gem 一起使用,但出现此错误 未定义的方法“分页”# 这是我的 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>

这是我的 gem 文件

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

我该如何解决这个错误

【问题讨论】:

  • 您是否安装了will_paginate gem?如果是,您安装后是否重新启动了服务器?
  • 是的,我安装了 will _paginate gem,安装后我重新启动了服务器。我在上面添加了我的 gemfile

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


【解决方案1】:

posts_controller的第8行,更改

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

到:

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

Searckick 在search 方法中已经有了built-in support for will_paginate

【讨论】:

  • 我尝试过使用它,但它不起作用。所以请给我另一个解决方案
猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2011-10-18
相关资源
最近更新 更多