在一个字段中进行多字搜索

时间:2016-06-16 03:27:41

标签: ruby-on-rails ruby activerecord

我在' search.rb'中使用了此代码的搜索功能。文件:

votsphonebooks = votsphonebooks.where("address like ?", "%#{address}%") if address.present?

有多个字段,这只是其中之一。

如何成功将此行更改为包含多个单词的地图。

EG。如果他们输入' 123假St' - 它会查找到那个,但我希望它能够搜索' 123','假',' St'。

2 个答案:

答案 0 :(得分:0)

你应该做的第一件事是用空格分割address

addresses = params[:address].split(" ")

然后您需要的是OR查询,您可以使用ARel来完成。

t = VotsPhoneBook.arel_table # The class name is my guess
arel_query = addresses.reduce(nil) do |q, address|
  q.nil? ? t[:address].matches("%#{address}%") : q.or(t[:address].matches("%#{address}%"))
end

results = Post.where(arel_query)

答案 1 :(得分:0)

尝试使用REGEXP代替LIKE

address_arr = address.split(" ")

votsphonebooks = votsphonebooks.where('address REGEXP ?',address_arr.join('|')) unless address_arr.blank?
相关问题