gpt4 book ai didi

ruby-on-rails - 将Searchkick与分页一起使用时出现未定义的方法错误

转载 作者:行者123 更新时间:2023-12-03 02:00:43 24 4
gpt4 key购买 nike

我正在尝试在Rails应用程序上实现搜索功能,以使搜索框正常工作。

但是,运行代码时,会出现以下错误:

NoMethodError in PostsController#index undefined method `paginate' for #<Searchkick::Results:0x007f3ff123f0e0>

(我也有一个标签云,如果我保持下面的代码不变,这很好用,但是如果我将 @posts = @posts更改为 @posts = Post.search,它也会破坏标签功能。)

我在用:
  • Rails 4.2.0
  • ruby​​ 2.2.1p85(2015-02-26修订版49769)[x86_64-linux]

  • 代码:

    这是我的 PostsController的样子:
    class PostsController < ApplicationController
    before_action :find_post, only: [:show, :edit, :update, :destroy]
    before_action :authenticate_user!, except: [:index, :show]

    def new
    @post = current_user.posts.build
    end

    def create
    @post = current_user.posts.build(post_params)

    if @post.save
    redirect_to @post
    else
    render 'new'
    end
    end

    def edit
    @post = Post.friendly.find(params[:id])
    end

    def update
    @post = Post.friendly.find(params[:id])
    if @post.update(post_params)
    redirect_to @post
    else
    render 'edit'
    end
    end

    def destroy
    @post.destroy
    redirect_to root_path
    end

    def index
    if params[:tag]
    @posts = Post.tagged_with(params[:tag]).paginate(page: params[:page], per_page: 5)
    else
    @posts = Post.order('created_at DESC').paginate(page: params[:page], per_page: 2)
    end

    if params[:nil].present?
    @posts = @posts.search(params[:nil]).paginate(page: params[:page])
    else
    @posts = @posts.paginate(page: params[:page])
    end
    end

    def show
    @post = Post.friendly.find(params[:id])
    end

    def autocomplete
    render json: Post.search(params[:query], autocomplete: true, limit: 5).map(&:title)
    end

    private

    def find_post
    @post = Post.friendly.find(params[:id])
    end

    def post_params
    params.require(:post).permit(:title, :description, :content, :tag_list, :preview)
    end
    end

    结束

    这是我的导航栏搜索表单的样子
    <li class="navs">
    <%= form_tag posts_path, method: :get do%>
    <%= text_field_tag :search, params[:query], placeholder: "Search Blog", name: "nil" , required: "", class: "input-field", id: "post_search", autocomplete: "off" do %>
    <%= submit_tag "", class: "material-icons search-box" %>
    <% end %>
    <% if params[:search].present? %>
    <%= link_to "X", posts_path %>
    <% end %>
    <% end %>
    </li>

    我进行了很多搜索,找不到任何可以为我做错事情提供正确指导的特定答案。

    我将非常感谢您的帮助。

    最佳答案

    问题在于search调用将返回Searchkick::Results集合,而不是ActiveRecord::Relation。后者已使用paginate方法进行了修补,而前者尚未进行修补,因此引发了NoMethodError

    根据documentation,您应该可以通过将分页参数传递给search方法来完成此工作:

    @posts = @posts.search(params[:nil], page: params[:page])

    关于ruby-on-rails - 将Searchkick与分页一起使用时出现未定义的方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32905699/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com