Я не хочу использовать соглашения о маршрутизации Rails, так как я хочу, чтобы мои URL-адреса выглядели определенным образом. Моя иерархия структуры модели динамична.Динамическая пользовательская маршрутизация в рельсах
Если у меня есть эти три пути ссылки разные книги:
/book/chapter/page
/book/chapter/page/sentence
/book/page/sentence
Различные книги, которые я храню в БД (MongoDB) имеют различные иерархии, но все они начинаются с книги и END с Предложением, это просто средняя часть меняется.
Моя текущая логика маршрутов обрабатывать все это в RoutesController:
Маршруты
get '*path', to: "routes#route"
Маршруты # прокладывайте
def route
path = params[:path].split("/")
## Look up the book
book = Book.find_by(name: path[0])
## Get the book specific hierarchy, like ["books", "pages", "sentences"]
## or ["books", "chapters", "pages", "sentences"]
hierarchy = book.hierarchy
if path.length == hierarchy.length
## Since end of hierarchy is always sentence
## Here is want to redirect_to Sentence#Show
else
## Here I want to look up based on model specific hierarchy
## LOOKUP CONTROLLER: hierarchy[path.length-1]}", ACTION: Show
## eg: Chapter#show, Subchapter#show, Page#show, etc.
end
end
Я не могу сделать простой redirect_to, потому что я не используя файл config/routes, чтобы он выдавал ошибку:
No route matches {:action=>"show", :controller=>"chapters", :path=>"books/chapters"}
Какие у вас модели и как они связаны? –