diff --git a/lib/stream/tag.rb b/lib/stream/tag.rb index db6551db0..a1a096bed 100644 --- a/lib/stream/tag.rb +++ b/lib/stream/tag.rb @@ -52,11 +52,11 @@ class Stream::Tag < Stream::Base def construct_post_query posts = StatusMessage - if user.present? + if user.present? posts = posts.owned_or_visible_by_user(user) else posts = posts.all_public end - posts.tagged_with(tag_name) + posts.tagged_with(tag_name, :any => true) end end diff --git a/lib/tasks/migrations.rake b/lib/tasks/migrations.rake index 55bda548d..12dda744d 100644 --- a/lib/tasks/migrations.rake +++ b/lib/tasks/migrations.rake @@ -74,4 +74,39 @@ namespace :migrations do } end + + # removes hashtags with uppercase letters and re-attaches + # the posts to the lowercase version + task :rewire_uppercase_hashtags => :environment do + evil_tags = ActsAsTaggableOn::Tag.where("lower(name) != name") + puts "found #{evil_tags.count} tags to convert..." + + evil_tags.each_with_index do |tag, i| + good_tag = ActsAsTaggableOn::Tag.find_or_create_by_name(tag.name.downcase) + puts "++ '#{tag.name}' has #{tag.taggings.count} records attached" + deleteme = [] + + tag.taggings.each do |tagging| + deleteme << tagging + end + + deleteme.each do |tagging| + #tag.taggings.delete(tagging) + good_tag.taggings << tagging + end + + puts "-- converted '#{tag.name}' to '#{good_tag.name}' with #{deleteme.count} records" + puts "\n## #{i} tags processed\n\n" if (i % 50 == 0) + end + end + + task :remove_uppercase_hashtags => :environment do + evil_tags = ActsAsTaggableOn::Tag.where("lower(name) != name") + evil_tags.each do |tag| + next if tag.taggings.count > 0 # non-ascii tags + + puts "removing '#{tag.name}'..." + tag.destroy + end + end end