我有这样的问题:
我有两种模式:用户和页面
用户和页面包含字段网址。
所以我有路线
get ':url' => 'users#show'
和get ':url' => 'pages#show'
我应该如何从此路线重定向到其中一个操作 users#show 或 pages#show ?
答案 0 :(得分:1)
首先需要代理操作,检查url是用户还是搜索数据库的页面然后调用实际操作的操作
类似
get 'users/:url', to: 'users#show', as: 'show_user'
get 'pages/:url', to: 'pages#show', as: 'show_page'
get ':url', to: 'application#user_or_page'
在ApplicationController上
def user_or_page
if u = User.find_by_permalink(params[:url])
redirect_to show_user_path(u)
elsif p = Page.find_by_permalink(params[:url])
redirect_to show_page_path(p)
else
# do something with an invalid url
end
end
我想你可以渲染一些模板而不是重定向,如果你想要的话,但我会使用重定向
答案 1 :(得分:0)
网址与动作之间存在一对一的关系。所以/ url既可以是用户#show OR pages#show,也可以不是两者。
听起来你可能想要两个单独的路由,一个用于/ users / url和/ pages / url,在这种情况下你可能想要像......这样的路线......
match 'users/url' => 'users#show'
match 'page/url' => 'pages#show'