2012-07-19 139 views
0

所以我的Project模型當前包含一個名爲標籤的列,其格式爲a,b,c,d,e,f等等......在視圖中,我有一個收集複選框的表單過濾器[],我可以在控制器中使用params [:filters]。我的問題是如何過濾包含至少一個這些標籤的項目?Rails元搜索複選框

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 

在這個例子中,我希望回到項目1,2,3,因爲它們含有至少一個或c

+0

如果您存儲項目的實例,請使用「@project」而不是@search。我不是100%確定你問的是否可以澄清你的問題。您是否在尋找具有特定標籤的項目? – Steve 2012-07-19 07:49:26

+0

添加了一個示例。希望澄清我的問題,對不起 – bph 2012-07-19 07:55:49

+0

你如何處理項目標記關係是一個has_many? – Steve 2012-07-19 08:17:51

回答

1

想通了使用squeel寶石...

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