使用searchkick在rails中将index.html与搜索集成

时间:2016-02-14 15:39:55

标签: ruby-on-rails elasticsearch searchkick

这里是rails的新手。我在下面有一个用户控制器的正常索引页面。

我只是通过搜索和弹性搜索将搜索添加到我的应用中。

如何将两个单独的代码块合并在一个视图中(index.html.erb)?我正在使用_user partial来进行最终渲染。

目前我收到此错误,因为它们未正确集成。

NoMethodError in UsersController#index
undefined method `each' for nil:NilClass

<div class="container-fluid">
  <% @users.each do |user| %>
    <div class="col-md-4">
        <%= render user %>
    </div>

视图/用户/ index.html.erb

搜索块

 <div class="books-search">
      <h1>Search Books</h1>
      <%= form_tag users_path, method: :get do %>
        <div class="form-group">
          <%= text_field_tag :query, params[:query], class: 'form-control' %>
          <%= submit_tag 'Search', class: 'btn btn-primary' %>
        </div>
      <% end %>
    </div>

正常索引块

    <div class="container-fluid">
      <% @users.each do |user| %>
        <div class="col-md-4">
            <%= render user %>
        </div>
      <% end %>
    </div>
    <%= will_paginate %>

用户控制器

def index
    if params[:query].present?
      @user = User.search(params[:query])
    else
      @users = User.paginate(page: params[:page])
    end
end

2 个答案:

答案 0 :(得分:0)

当您发送搜索参数时,您的控制器将执行以下操作:

@user = User.search(params[:query])

虽然视图预计会有@users变量,而不是@user@users是零。

答案 1 :(得分:0)

def index
    if params[:query].present?
      @users = User.search(params[:query]), page: params[:page], per_page: 10
    else
      @users = User.paginate(page: params[:page], per_page: 10)
    end
end

然后在您的视图中(index.html.erb)

使用此@users实例变量循环遍历每个用户