Rails 3.0にActsAsTaggableOn gem を使用していますが、すべて正常に動作します。
現在、ActiveRecord でいくつかのフィールドのみを選択するいくつかのクエリを高速化しようとしています。
@items = Item.select("items.id, items.title").where("items.title IS NOT NULL)
@items.tag_counts
しかし、MySQL から次のエラーが返されました。
> ActiveRecord::StatementInvalid: Mysql::Error: Operand should contain 1 column(s): SELECT
SQL_NO_CACHE tags.*, COUNT(*) AS count FROM `tags` LEFT OUTER JOIN taggings ON tags.id =
taggings.tag_id AND taggings.context = 'tags' INNER JOIN items ON items.id =
taggings.taggable_id WHERE (taggings.taggable_type = 'Item') AND (taggings.taggable_id
IN(SELECT items.id, items.title, items.id FROM `items` WHERE (title IS NOT NULL)))
GROUP BY tags.id, tags.name HAVING COUNT(*) > 0
代わりに、コレクションで tag_counts を定期的に呼び出すと、次のように機能します。
@items = Item.where("items.title IS NOT NULL)
@items.tag_counts
宝石を編集せずに簡単な回避策のアイデアはありますか?