(整件事修改了)
如果您想允许动态匹配以及正常的宁静路线,有几个选项 - (将其放在路线的末尾,否则它将匹配所有内容)
match '*raw' => 'dynamic#show'
在 dynamic_controller.rb
def show
parts = params[:raw].split '/'
# do logic here to set all variables used in views
render @resource_or_page
end
您还可以在搜索功能中使用输入并重定向到该搜索的第一个结果。如果没有结果,则返回 404。
def show
results = search_method_here params[:raw].sub('/', ' ')
if results.any?
redirect_to results.first
else
raise ActionController::RoutingError.new 'Not Found'
end
end
此外,对于宁静路线中的 freindlier url,试试这个:https ://github.com/norman/friendly_id
我认为重要的是要意识到人们通常不会手动操作 URL,拥有可读的 url 很好,但更重要的是让他们清楚自己在做什么/去哪里。
针对您的评论,我认为您在路由方面存在误导。如果您创建 2 条路线:category
和:page
,它们匹配完全相同的 url,除了其中一个将其存储params[:category]
在params[:page]
. 为了区分它,您需要匹配不同数量的参数,例如:category/:product
命名空间或命名空间,或者可能是指定路由路由到的 MVC 的 restful 路由。