2013-07-21 79 views
0

我希望能夠在我的Micropost模型中進行搜索。 Microposts擁有藝術家和歌曲屬性。我使用acts_as_taggable gem來標記這些微博。在數組內簡單搜索

型號微柱:

def self.search(search) 
    arel = order('created_at') 
    arel = arel.where('UPPER(artist) LIKE UPPER(?) OR UPPER(song) LIKE UPPER(?)', "%#{search}%", "%#{search}%").order('created_at') if search.present? 
    arel 
end 

此代碼可以讓我尋找歌手和歌曲,但我怎麼也搜索標籤?

Micropost.find(1).tags添加返回[#ActsAsTaggableOn ::標籤ID:18,名稱: 「搖滾」,#ActsAsTaggableOn ::標籤ID:3,名稱: 「RAP」]

微柱。 find(1).tags.map(&:name)返回一個類似於[「rock」,「rap」的數組]

如何查詢micropost的標籤不在表格中以及藝術家和歌曲?謝謝。

有點像添加另一個where()像?

where(self.tags.map(&:name), 'LIKE UPPER(?)', "%#{search}%") 

回答

0

您能否包含您正在使用的寶石的鏈接?那裏有幾個。這個有內置:https://github.com/mbleigh/acts-as-taggable-on

更一般地說,標籤通常是最好的實現爲一個單獨的表,然後加入到對象,而不是與對象本身存儲。這樣,您可以從標籤表中加入以查找對象。

更具體地說,您的示例接近尾端看起來倒退。您有:

where(self.tags.map(&:name), 'LIKE UPPER(?)', "%#{search}%") 

但是你(恕我直言)應嘗試啓動與標籤和映射回對象。例如:

Tag.where('LIKE UPPER(?)', "%#{search}%").microposts