所以我的Project模型目前包含一个名为tags的列,其格式为a,b,c,d,e,f等...在视图中,我有一个表单,它将复选框收集到filters []中我可以在控制器中使用params [:filters]。我的问题是如何过滤包含至少一个标签的项目?
def index
@search = Project.search(params[:search])
@projects = @search.???
end
我想像
@projects = Project.search(:tags_contains => params[:filters])
或
params[:filters].each do |p|
@projects ||= @search.where(["projects.tags like ?", p])
end
会起作用,但它似乎没有返回任何东西。有什么建议吗?
示例:假设在表格中检查了复选框a和c,该表格将包含在params [:filters]中。我有三个项目:
Project | Tags
------------+------
Project 1 | a,b
Project 2 | c
Project 3 | a,c
Project 4 | d
在这个例子中,我想返回Project 1,2,3,因为它们至少包含a或c
答案 0 :(得分:1)
使用squeel gem ...
计算出来params[:filters].each do |p|
@projects ||= @search.where(["projects.tags like ?", "%#{p}%"])
end