将pg_search用于多个模型

时间:2014-10-22 17:48:16

标签: ruby-on-rails pg-search

现在我有三种型号:餐厅,类别和商品。所有这些表都有name的属性。我想在主页上设置搜索,可以访问所有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

问题

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

1 个答案:

答案 0 :(得分:3)

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

您很可能在该表中没有任何数据时遇到问题。文档说&#34;如果此模型已有现有记录,则需要重新索引此模型以将现有记录放入pg_search_documents表中。请参阅下面的重建任务。&#34;

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