Ruby on Rails搜索数组值以在多个字段(数据表)中查找

时间:2012-12-29 11:12:20

标签: ruby-on-rails ruby activerecord datatables

我实现了http://railscasts.com/episodes/340-datatables上建议的数据表,它运行得很好。不幸的是,它并不涉及在输入字段中使用空格进行搜索的问题。如果我用搜索功能实现它,用javascript处理它就可以了。

所以我想做的是在数据库上搜索sql参数按空格分割的许多字段(参数的动态大小) 例如。 “name1 street city” - >这意味着返回的对象必须在其中一个对象字段中包含所有三个“name1”,“street”,“city”。

这是一个例子: 人:姓名,地址,:城市,:国家

人(“Peter Mayer”,“Some Street 111”,“New York”,“United States”)

  • 如果用户使用“Peter York”搜索,则应找到该对象
  • 如果用户搜索“Peter Los Angeles”,则不应该找到任何内容
  • 如果用户使用“111 Mayer States York”进行搜索,则应找到该对象
okey,我可以编写许多不同的sql,尊重params的数量,但这不是那么好

有没有一种简单的方法可以解决这个问题?

仅使用第一个参数搜索后过滤不是一个选项,因为分页不再起作用

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

  1. 加入必须在一个字符串中找到的所有属性

    search_attributes = [person.name1, person.address, person.city, person.country].join(' ') 对于您的示例,search_attributes将等于"Peter Mayer Some Street 111 New York United States"

  2. 然后迭代查询中的每个字符串,并确保使用search_attributes.include?中找到它,并且只有在{{}}中找到所发送查询中的所有字符串时才返回记录{1}}

答案 1 :(得分:0)

我现在这样做了:

searchData = params[:sSearch].split(" ")

searchString = "1 = 1"
searchParams = {}
i = 0
searchData.each do |searchParam|
    searchString += " AND (persons.name like :search"+i.to_s+" or persons.address like
     :search"+i.to_s+" or persons.city like :search"+i.to_s+" or persons.country like    
     :search"+i.to_s+"+")"

    searchParams["search#{i}".to_sym] = "%"+searchParam+"%"
    i += 1
end

Person.where(searchString, searchParams)