0

所以我的项目模型当前包含一个名为 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

4

1 回答 1

1

用 squeel gem 想通了...

params[:filters].each do |p|
     @projects ||= @search.where(["projects.tags like ?", "%#{p}%"])
end
于 2012-07-19T08:30:15.803 回答