我在' search.rb'中使用了此代码的搜索功能。文件:
votsphonebooks = votsphonebooks.where("address like ?", "%#{address}%") if address.present?
有多个字段,这只是其中之一。
如何成功将此行更改为包含多个单词的地图。
EG。如果他们输入' 123假St' - 它会查找到那个,但我希望它能够搜索' 123','假',' St'。
答案 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?