我实现了http://railscasts.com/episodes/340-datatables上建议的数据表,它运行得很好。不幸的是,它并不涉及在输入字段中使用空格进行搜索的问题。如果我用搜索功能实现它,用javascript处理它就可以了。
所以我想做的是在数据库上搜索sql参数按空格分割的许多字段(参数的动态大小) 例如。 “name1 street city” - >这意味着返回的对象必须在其中一个对象字段中包含所有三个“name1”,“street”,“city”。
这是一个例子: 人:姓名,地址,:城市,:国家
人(“Peter Mayer”,“Some Street 111”,“New York”,“United States”)
有没有一种简单的方法可以解决这个问题?
仅使用第一个参数搜索后过滤不是一个选项,因为分页不再起作用
答案 0 :(得分:0)
您可以执行以下操作:
加入必须在一个字符串中找到的所有属性
search_attributes = [person.name1, person.address, person.city, person.country].join(' ')
对于您的示例,search_attributes
将等于"Peter Mayer Some Street 111 New York United States"
然后迭代查询中的每个字符串,并确保使用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)