1

现在我有三个模型:餐厅、类别和项目。所有这些表都有一个名称属性。我想在可以访问所有 3 的主页上设置搜索。进行搜索时,搜索将带回餐厅名称、类别名称和/或项目名称。

我在 Rails 4 应用程序中使用 pg_search。 https://github.com/Casecommons/pg_search

到目前为止,我已经捆绑了 gem,设置了多搜索并运行了迁移。我的模型目前如下所示:

楷模

class Restaurant < ActiveRecord::Base
  has_many :items

  validates :name, presence: true
  validates :gg, presence: true

  include PgSearch
  multisearchable against: :name

end

class Category < ActiveRecord::Base
  has_many :items

  validates :name, presence: true
  validates :gg, presence: true

  include PgSearch
  multisearchable against: :name

end

class Item < ActiveRecord::Base
  belongs_to :restaurants
  belongs_to :categories

  validates :name, presence: true
  validates :gg, presence: true

  include PgSearch
  multisearchable against: :name

end

使用搜索框查看

<%= form_tag restaurants_path, method: :get do %>
  <%= text_field_tag :query, params[:query], class: "search-box" %>
  <%= submit_tag "Search", name: nil, class: "btn btn-search" %>
<% end %>

餐厅控制器

class RestaurantsController < ApplicationController

  def index
    @restaurants = PgSearch.multisearch( params[:q] )
  end

end

问题

  • 控制器没有正确取回多重搜索项。我该如何正确地写这个?
  • 如果我想在一个视图上实现所有三个搜索结果,我应该设置一个新控制器还是将类别和项目也添加到餐厅控制器?
  • 请发送任何好的例子。
4

1 回答 1

3

运行迁移时,您会创建一个名为 pg_search_documents 的新表。那是 pg_search 将查询的表。

很可能您遇到的问题是该表中没有任何数据。文档说“如果这个模型已经有现有的记录,你需要重新索引这个模型以将现有的记录放入 pg_search_documents 表中。请参阅下面的重建任务。”

您想参考文档的这一部分:https ://github.com/Casecommons/pg_search#rebuilding-search-documents-for-a-given-class

于 2015-08-29T20:11:53.553 回答