diff --git a/app/assets/javascripts/discourse/models/category.js.es6 b/app/assets/javascripts/discourse/models/category.js.es6 index 8dfdc4cf9e8..f57cc392b57 100644 --- a/app/assets/javascripts/discourse/models/category.js.es6 +++ b/app/assets/javascripts/discourse/models/category.js.es6 @@ -419,6 +419,10 @@ Category.reopenClass({ : ajax(`/c/${slug}/find_by_slug.json`); }, + reloadBySlugPath(slugPath) { + return ajax(`/c/${slugPath}/find_by_slug.json`); + }, + search(term, opts) { var limit = 5; diff --git a/app/assets/javascripts/discourse/routes/build-category-route.js.es6 b/app/assets/javascripts/discourse/routes/build-category-route.js.es6 index 543d1ba568d..f46ea868f7d 100644 --- a/app/assets/javascripts/discourse/routes/build-category-route.js.es6 +++ b/app/assets/javascripts/discourse/routes/build-category-route.js.es6 @@ -50,6 +50,20 @@ export default (filterArg, params) => { modelParams.category_slug_path_with_id ); + if (!category) { + const parts = modelParams.category_slug_path_with_id.split("/"); + if (parts.length > 0 && parts[parts.length - 1].match(/^\d+$/)) { + parts.pop(); + } + + return Category.reloadBySlugPath(parts.join("/")).then(result => { + const record = this.store.createRecord("category", result.category); + record.setupGroupsAndPermissions(); + this.site.updateCategory(record); + return { category: record }; + }); + } + if (category) { return { category }; }