2016-11-25 44 views
0

我有一個用戶表,它擁有並屬於許多工具。Rails過濾已屬於許多數據庫

因此每個用戶可以擁有任意數量的工具,並且工具可以與用戶相關聯。

我想要做的是創建一個過濾系統,以便在我的主頁上人們可以點擊工具選擇,它將只顯示與這些工具有關聯的用戶。

所以它需要帶回僅具有所有的人已經選擇例如人誰也Git和吉拉的技能用戶,而不是的git或吉拉

我可以用

做了一個工具
if params["Confluence"] 
     contractors = contractors.includes(:tools).where(tools: { name: "Confluence" }) 
end 

我已經tryed做這樣的事情

contractors = contractors.includes(:tools).where(tools: { name: "Confluence" , name: "Git", name: "JIRA Core" , name:"JIRA Software"}) 

但只帶回與列表中的最後一個工具的用戶。我也試過這樣

if params["JIRA Core"] 
     contractors = contractors.includes(:tools).where(tools: {name: "JIRA Core"}) 
    end 

    if params["JIRA Software"] 
     contractors = contractors.includes(:tools).where(tools: {name: "JIRA Software"}) 
    end 

但是這也不起作用。有人有主意嗎?

+0

contractors.joins(:工具)。凡( 'tools.name =?', 「JIRA核心」) –

回答

1

檢查了這一點

這是當你需要的情況下,承包商應的工具中的至少一個

contractors.joins(:tools).where('tools.name IN (?) ', ['JIRA Core','Git']).uniq 

OR 

contractors.joins(:tools).where('tools.name = ?', "JIRA Core").uniq 

OR 

這種情況,當你需要的承包商應具有的所有工具

param_values = ['JIRA Core','Git']

contractors.joins(:tools).where('tools.name IN (?) ', param_values).group('contractors.id').having('contractors.count = ?', param_values.count).uniq 
+0

這已經讓我更接近的結果,我需要謝謝,但是這樣做是在每次他擁有其中一個工具時帶回一個該用戶的實例,以及我可以從哪裏去的任何想法? – Adear

+0

@Adear是的,他會獲取擁有其中一種工具的用戶....因此,您可以獲得重複的用戶instaces,因此您可以使用uniq –

+0

我希望它能顯示擁有所有這些工具的用戶,任何想法這是怎麼完成的? – Adear

0

你的工具PARAMS應該是由用戶

@tools = params[:tools] 

申報承辦陣列選好了,你會通過查詢每個工具

@contractors = [] 

@tools.each do |tool| 
    @contractors << Contractor.includes(:tool).where(tools: {name: tool.name}) 
end 

推壓平做工具的陣列。每個視圖模板中。

@contractors.flatten! 
在瀏覽

<% @contractors.each do |contractor|%> 
    <p><%=contractor.name</p> 
<%end%>