Rails元搜索复选框

时间:2012-07-19 07:40:30

标签: ruby-on-rails ruby-on-rails-3

所以我的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

1 个答案:

答案 0 :(得分:1)

使用squeel gem ...

计算出来
params[:filters].each do |p|
     @projects ||= @search.where(["projects.tags like ?", "%#{p}%"])
end