акты-как-taggable-on: найти теги с именем LIKE, сортировать по tag_counts? - PullRequest
0 голосов
/ 12 мая 2010

Привет! Я использую плагин rails acts-as-taggable-on и пытаюсь найти 5 самых популярных тегов, имена которых совпадают и частично соответствуют данному запросу.

Когда я делаю 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"

Буду признателен за любую помощь по этому вопросу.

1 Ответ

4 голосов
/ 12 мая 2010

Запрос на тур должен выглядеть так

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]) 
...