diff --git a/app/models/category.rb b/app/models/category.rb index 25f6c6fbf..a8f887654 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -353,6 +353,12 @@ SQL def uncategorized? id == SiteSetting.uncategorized_category_id end + + def url + url = "/category" + url << "/#{parent_category.slug}" if parent_category_id + url << "/#{slug}" + end end # == Schema Information diff --git a/lib/search/search_result.rb b/lib/search/search_result.rb index 0cc110551..039c96f70 100644 --- a/lib/search/search_result.rb +++ b/lib/search/search_result.rb @@ -24,7 +24,7 @@ class Search end def self.from_category(c) - SearchResult.new(type: :category, id: c.id, title: c.name, url: "/category/#{c.slug}").tap do |r| + SearchResult.new(type: :category, id: c.id, title: c.name, url: c.url).tap do |r| r.color = c.color r.text_color = c.text_color end diff --git a/spec/models/category_spec.rb b/spec/models/category_spec.rb index 2aec9b9a3..e361455a3 100644 --- a/spec/models/category_spec.rb +++ b/spec/models/category_spec.rb @@ -348,6 +348,21 @@ describe Category do end end + describe "#url" do + it "builds a url for normal categories" do + category = Fabricate(:category, name: "cats") + expect(category.url).to eq "/category/cats" + end + + describe "for subcategories" do + it "includes the parent category" do + parent_category = Fabricate(:category, name: "parent") + subcategory = Fabricate(:category, name: "child", + parent_category_id: parent_category.id) + expect(subcategory.url).to eq "/category/parent/child" + end + end + end describe "parent categories" do let(:user) { Fabricate(:user) }