我正在尝试使用两个搜索字段,但最终会将两个结果合并在一起。 在一个字段中,您可以搜索列表的位置,在另一个字段中搜索关键字,该关键字将查找列表的标题和描述。 输入位置和关键字后,应显示与位置和关键字匹配的商家信息。因此,如果我进入旧金山和零售店,则只会出现位于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 %>
答案 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可以让你轻松完成。所产生的开销将是微不足道的,并且可以为您在此搜索问题中提供更大的灵活性,以及您可能需要稍后解决的任何其他问题。