2012-12-04 55 views
0

我有一個連接表連接項與標籤與多對多的關係。我正在嘗試對所有項目進行分頁查看,如果搜索結果中包含名稱或標籤名稱匹配的所有項目。Rails加入表的條件查詢

當我這樣做:

search = "one" 
    Item.all(:conditions=>["items.name LIKE ?", "%#{search}%"]); 

我坐上導致它包含在它的「一」項目。

然後,當我這樣做:

search = "one" 
    Item.all(:joins=>[:tags], :conditions=>["items.name LIKE ?", "%#{search}%"]); 

我得到一個空集。

爲什麼活動記錄給我一個空集而不是仍然給我一個符合條件的結果?我怎麼能得到我期待的結果?

回答

0

想通了。原來:joins=>[:tags]默認爲INNER JOIN,當我的查詢需要的是OUTER JOIN。我的問題的解決辦法是做

search = "one" 
    Item.all(
     :joins=>['LEFT OUTER JOIN "tags_items" ON "tags_items"."webservice_id" = "webservices"."id" LEFT OUTER JOIN "tags" ON "tags"."id" = "tags_items"."tag_id"'], 
     :conditions=>["items.name LIKE ?", "%#{search}%"] 
    )