mbleigh / acts-as-taggable-on

A tagging plugin for Rails applications that allows for custom tagging along dynamic contexts.
http://mbleigh.lighthouseapp.com/projects/10116-acts-as-taggable-on
MIT License
4.97k stars 1.2k forks source link

Standard xxxxx_counts ( e.g., method 'context'_counts, 'reason'_counts ) seems not limiting count to the right scope #1031

Open alemos2611 opened 3 years ago

alemos2611 commented 3 years ago

I have a model called Linkage that has two acts_as_taggable_on (context, reason) that have one overlapping label called 'CLOUD'. It seems that the SQL query is not scoping the count properly as I receive CLOUD (3) in Linkage.context_counts and also Linkage.reason_counts.

acts_as_taggable_on :context, :reason

Linkage.context_counts.pluck('name','taggings_count')

(0.2ms) SELECT "tags"."name", "tags"."taggings_count" FROM "tags" JOIN (SELECT taggings.tag_id, COUNT(taggings.tag_id) AS tags_count FROM "taggings" WHERE (taggings.taggable_type = 'Linkage' AND taggings.context = 'context') AND (taggings.taggable_id IN(SELECT "linkages"."id" FROM "linkages")) GROUP BY "taggings"."tag_id" HAVING (COUNT(taggings.tag_id) > 0)) AS taggings ON taggings.tag_id = tags.id => [["CLOUD", 3]]

2.7.2 :111 > Linkage.reason_counts.pluck('name','taggings_count')

(0.2ms) SELECT "tags"."name", "tags"."taggings_count" FROM "tags" JOIN (SELECT taggings.tag_id, COUNT(taggings.tag_id) AS tags_count FROM "taggings" WHERE (taggings.taggable_type = 'Linkage' AND taggings.context = 'reason') AND (taggings.taggable_id IN(SELECT "linkages"."id" FROM "linkages")) GROUP BY "taggings"."tag_id" HAVING (COUNT(taggings.tag_id) > 0)) AS taggings ON taggings.tag_id = tags.id => [["CLOUD", 3]]

Currently, there is one 'CLOUD' label assigned to 'context', and two 'CLOUD' labels assigned to 'reason' .

Would appreciate to confirm if this is SQL not behaving as expected for the counters for each specific tag-name

sqlite> select * from tags where name='CLOUD'; id|name|created_at|updated_at|taggings_count 59|CLOUD|2021-04-18 18:17:04.247529|2021-04-18 18:17:04.247529|3

sqlite> select * from taggings where tag_id=59;

id|tag_id|taggable_type|taggable_id|tagger_type|tagger_id|context|created_at 250|59|Linkage|39|||context|2021-04-18 18:17:04.253477 299|59|Linkage|52|||reason|2021-04-18 18:17:05.101537 300|59|Linkage|53|||reason|2021-04-18 18:17:05.122889