Include aliased tags in autocomplete
This commit is contained in:
@@ -673,6 +673,23 @@ class Tag < ActiveRecord::Base
|
||||
|
||||
q
|
||||
end
|
||||
|
||||
def names_matches_with_aliases(name)
|
||||
query1 = Tag.select("tags.name, tags.post_count, tags.category, null AS antecedent_name")
|
||||
.search(:name_matches => name, :order => "count").limit(10)
|
||||
|
||||
name = name.mb_chars.downcase.to_escaped_for_sql_like
|
||||
query2 = TagAlias.select("tags.name, tag_aliases.post_count, tags.category, tag_aliases.antecedent_name")
|
||||
.joins("INNER JOIN tags ON tags.name = tag_aliases.consequent_name")
|
||||
.where("tag_aliases.antecedent_name LIKE ? ESCAPE E'\\\\'", name)
|
||||
.where("tags.name NOT LIKE ? ESCAPE E'\\\\'", name)
|
||||
.where("tag_aliases.post_count > 0")
|
||||
.order("tag_aliases.post_count desc")
|
||||
.limit(20) # Get 20 records even though only 10 will be displayed in case some duplicates get filtered out.
|
||||
|
||||
sql_query = "((#{query1.to_sql}) UNION ALL (#{query2.to_sql})) AS unioned_query"
|
||||
Tag.select("DISTINCT ON (name, post_count) *").from(sql_query).order("post_count desc").limit(10)
|
||||
end
|
||||
end
|
||||
|
||||
def editable_by?(user)
|
||||
|
||||
@@ -254,4 +254,8 @@ class TagAlias < ActiveRecord::Base
|
||||
update_forum_topic_for_reject
|
||||
destroy
|
||||
end
|
||||
|
||||
def self.update_cached_post_counts_for_all
|
||||
execute_sql("UPDATE tag_aliases SET post_count = tags.post_count FROM tags WHERE tags.name = tag_aliases.consequent_name")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user