Rails- 多字段动态搜索
Rails- Dynamic search on multiple fields
我正在尝试写一个问题以允许在不同模型的多个字段上进行搜索。我想插入一个 search_fields 数组并使用 params[:query] 值生成一个 where OR 查询,如下所示:
scope = scope.where("LOWER(user_name) LIKE LOWER(?)", "%#{params[:query]}%")
它适用于一个值,但我需要接收一组列名(不同型号不同)并生成这样的位置或查询(例如两个项目的数组):
search_fields = ["title", "user_name"]
where("LOWER(title) LIKE LOWER(?) OR LOWER(user_name) LIKE LOWER(?)", "%#{params[:query]}%", "%#{params[:query]}%")
我生成这样的查询:
query = search_fields.map do |s|
"LOWER(#{s}) LIKE LOWER(?)"
end.join(' OR ')
而且似乎没有实现 where_or 方法。我无论如何也做不到,有什么办法可以做到吗?
感谢大家的回答
找到了!
search_fields = ["title", "user_name"]
query_param = sprintf("%%%s%%", params[:query])
search = search_fields.map do |field|
query_string = "LOWER(#{field}) LIKE LOWER(?)"
end.join(' OR ')
@scope = @scope.where(search, *[query_param] * search_fields.count)
它生成以下字符串:
WHERE (LOWER(title) LIKE LOWER('%searchquery%') OR LOWER(user_name) LIKE LOWER('%searchquery%'))
我正在尝试写一个问题以允许在不同模型的多个字段上进行搜索。我想插入一个 search_fields 数组并使用 params[:query] 值生成一个 where OR 查询,如下所示:
scope = scope.where("LOWER(user_name) LIKE LOWER(?)", "%#{params[:query]}%")
它适用于一个值,但我需要接收一组列名(不同型号不同)并生成这样的位置或查询(例如两个项目的数组):
search_fields = ["title", "user_name"]
where("LOWER(title) LIKE LOWER(?) OR LOWER(user_name) LIKE LOWER(?)", "%#{params[:query]}%", "%#{params[:query]}%")
我生成这样的查询:
query = search_fields.map do |s|
"LOWER(#{s}) LIKE LOWER(?)"
end.join(' OR ')
而且似乎没有实现 where_or 方法。我无论如何也做不到,有什么办法可以做到吗?
感谢大家的回答
找到了!
search_fields = ["title", "user_name"]
query_param = sprintf("%%%s%%", params[:query])
search = search_fields.map do |field|
query_string = "LOWER(#{field}) LIKE LOWER(?)"
end.join(' OR ')
@scope = @scope.where(search, *[query_param] * search_fields.count)
它生成以下字符串:
WHERE (LOWER(title) LIKE LOWER('%searchquery%') OR LOWER(user_name) LIKE LOWER('%searchquery%'))