【问题标题】:Using pg_search for multiple models对多个模型使用 pg_search
【发布时间】:2014-10-22 17:48:16
【问题描述】:

现在我有三个模型:餐厅、类别和项目。所有这些表都有一个名称属性。我想在可以访问所有 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

问题

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

【问题讨论】:

    标签: ruby-on-rails pg-search


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多