[英]Dynamic Custom Routing in Rails
我不想使用Rails路由约定,因为我希望自己的url看起来有些特定。 我的模型结构层次结构是动态的。
如果我有这三种引用不同书籍的路径:
/book/chapter/page
/book/chapter/page/sentence
/book/page/sentence
我存储在数据库(mongodb)中的不同书籍具有不同的层次结构,但是它们都以Book开头,以Sentence结束,只是中间部分有所不同。
我当前对Routes的逻辑是在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"}
我知道您不想使用默认路由,但是您可以使它们起作用。
scope ':bookName' do
scope '(:chapter)', :chapter => /c\d+/ do #we need to know if it's a chapter
scope '(:page)', :page => /p\d+/ do #or a page, c1 = chapter, p1 = page
resources :sentence
end
resources :page
end
resources :chapter
end
()将路径的一部分设为可选。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.