【问题标题】:combine two search results ruby on rails合并两个搜索结果 ruby​​ on rails
【发布时间】:2014-09-17 19:03:20
【问题描述】:

我试图有两个搜索字段,但最终将两个结果组合在一起。 在一个字段中,您可以搜索列表的位置,在另一个字段中搜索关键字,这将查找列表的标题和描述。 输入位置和关键字后,应显示与位置和关键字匹配的列表。因此,如果我进入 San Francisco and Retail,只会弹出位于 SF 且带有描述或标题 Retail 的列表。

Feng Chen 建议通过以下方式在一个查询中执行此操作:

self.where("location like ? and (title like ? or description like ?)", query, query)

但是,这不会显示与位置和关键字(标题、描述)都匹配的结果。 我需要在我的视图中或其他任何地方更改某些内容吗?

这是我的listing.rb

def self.locsearch(search)
  query = "%#{search}%"
  if search
    self.where("location like ? and (title like ? or description like ?)", query, query)
  else
    self.all
  end
end

结束

Static_pages_controller.rb

def home
@listings = @listings.locsearch(params[:search]) if params[:search].present?

home.html.erb

<%= form_tag findjobs_path, :controller => 'listings', :action => 'locsearch', :method => 'get' do %>
<p>
  <%= text_field_tag :search, "location"  %>
  <%= text_field_tag :search, "keyword"  %>
  <%= submit_tag "search" %>
</p>
</div>
<% end %>

【问题讨论】:

  • 你的 descsearch 方法在哪里?

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

您需要在列表模型中使用 descsearch 方法,您需要这样做

# Right now you have @listings = @listings.locsearch(...)
# You need @listings = Listing.locsearch(...)
@listings = Listing.locsearch(params[:search][:location], params[:search][:keyword])

在您的列表模型中

def self.locsearch(location, keyword)
  location = "%#{location}%"
  keyword = "%#{keyword}%"
  if !location.bllank? && !keyword.blank?
    self.where("location like ? and (title like ? or description like ?)", location, keyword)
  else
    self.all
  end
end

结束

【讨论】:

  • 是的,很抱歉我最初有一个 descsearch 方法,但我被告知我只需要一种搜索​​方法。我在上面编辑了我的代码
  • 查看我的回答中的评论。
  • 嘿尼克,当我更改它时,它会过滤标题和描述,但不会过滤位置。所以我把旧金山零售。我在旧金山和芝加哥获得标题或描述为零售的商品。
  • Rika,看看我的答案的变化。基本上,您可能应该为您的搜索功能分离关键字和位置。希望有帮助。
  • 我收到此错误 undefined method `[]' for nil:NilClass highlighting @listings = Listing.locsearch(params[:search][:location], params[:search][:keyword ])
【解决方案2】:

如果您使用的是 postgres 数据库,您可以尝试使用全文搜索功能来执行上述操作。有 gem pg_search enter link description here它可以让你轻松做到这一点。产生的开销将是微不足道的,并且会为您在此搜索问题以及您以后可能必须解决的任何其他问题提供更大的灵活性。

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 2012-09-30
    • 2016-04-07
    • 2015-04-20
    • 2012-09-20
    • 2015-07-19
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多