【发布时间】:2014-01-24 16:30:12
【问题描述】:
我有这样的问题:
我有两个模型:User 和 Page。
Users 和 Pages 有字段 url.
所以我有路线get ':url' => 'users#show' 和 get ':url' => 'pages#show'
我应该如何从这条路线重定向到 users#show 或 pages#show 操作之一?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
我有这样的问题:
我有两个模型:User 和 Page。
Users 和 Pages 有字段 url.
所以我有路线get ':url' => 'users#show' 和 get ':url' => 'pages#show'
我应该如何从这条路线重定向到 users#show 或 pages#show 操作之一?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
您首先需要一个代理操作,该操作检查 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'
在应用控制器上
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
如果你愿意,我想你可以渲染一些模板而不是重定向,但我会使用重定向
【讨论】:
url 和 action 之间存在一对一的关系。所以 /url 可以到 user#show 或 pages#show,但不能同时到。
听起来您可能需要两条单独的路由,一条用于 /users/url 和 /pages/url,在这种情况下,您可能需要类似...的路由
match 'users/url' => 'users#show'
match 'page/url' => 'pages#show'
【讨论】: