在轨道上结合两个搜索结果ruby

时间:2014-09-17 19:03:21

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

我正在尝试使用两个搜索字段,但最终会将两个结果合并在一起。 在一个字段中,您可以搜索列表的位置,在另一个字段中搜索关键字,该关键字将查找列表的标题和描述。 输入位置和关键字后,应显示与位置和关键字匹配的商家信息。因此,如果我进入旧金山和零售店,则只会出现位于SF且具有描述或标题零售的列表。

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

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

但是,这并未显示匹配位置和关键字(标题,说明)的结果。 我需要在我的视野中或其他任何地方更改某些内容吗?

以下是我的list.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 %>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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