我正在尝试构建一个微型引擎,允许用户输入即时构建搜索查询。我在params中得到列名和搜索字符串,我们假设:
params = {:filter_column => "column_name", :filter_string => "search term"}
我知道,如果我只是在我的模型上调用标准类型,那将是:
ModelName.where("column_name LIKE ?", params[:filter_string])
我遇到的问题是我正在尝试编译我的过滤器列表,然后一次一个地应用它们进行搜索。在调用where方法之前,我可以构建where字符串吗?
我试过了:
ModelName.where("? LIKE ? ", column_name, search_term)
没有太多运气。任何提示,技巧或指示?
谢谢!
答案 0 :(得分:2)
您可能想尝试使用Metawhere Gem
的解决方案 我正在考虑这样的事情:Model.where(params[:filter_column].intern.matches => params[:filter_string])
你可以在它自己的条件中按顺序构建每一个,用逗号或后续的where调用。
答案 1 :(得分:-1)
如果只有你可以改变column_name
的内容(即没有注射风险),那么使用
ModelName.where("`#{column_name}` LIKE ?", search_term)