0

嗨,我正在使用軌道插件acts-as-taggable-on,我試圖找到名稱匹配和部分匹配給定查詢的前5名的最常用標籤。acts-as-taggable-on:找到名稱爲LIKE的標籤,按tag_counts排序?

當我做User.skill_counts.order('count DESC').limit(5).where('name LIKE ?', params[:query])

這返回以下錯誤:

ActiveRecord::StatementInvalid: SQLite3::SQLException: ambiguous column name: name: SELECT  tags.*, COUNT(*) AS count FROM  "tags" INNER JOIN users ON users.id = taggings.taggable_id LEFT OUTER JOIN taggings ON tags.id = taggings.tag_id AND taggings.context = 'skills' WHERE  (taggings.taggable_type = 'User') AND (taggings.taggable_id IN(SELECT  users.id FROM  "users")) AND (name LIKE 'asd') GROUP BY tags.id, tags.name HAVING COUNT(*) > 0 ORDER BY count DESC LIMIT 5 

但是當我做User.skill_counts.first.name

這將返回

"alliteration" 

我在感謝所有幫助這件事。

回答

4

旅遊查詢應該是這樣的

SELECT tags.*, COUNT(*) AS count FROM "tags" 
     INNER JOIN users ON users.id = taggings.taggable_id 
     LEFT OUTER JOIN taggings ON tags.id = taggings.tag_id AND taggings.context = 'skills' 
     WHERE (taggings.taggable_type = 'User') AND 
       (taggings.taggable_id IN(SELECT users.id FROM "users")) AND 
       (tags.name LIKE 'asd') 
     GROUP BY tags.id, tags.name HAVING COUNT(*) > 0 
     ORDER BY count DESC 
     LIMIT 5 

對於這種嘗試以下

User.skill_counts.order('count DESC').limit(5).where('tags.name LIKE ?', params[:query])