Rails中一条路由的两个动作

时间:2014-01-24 16:30:12

标签: ruby-on-rails ruby-on-rails-4

我有这样的问题:
我有两种模式:用户页面 用户页面包含字段网址
所以我有路线
get ':url' => 'users#show'get ':url' => 'pages#show'
我应该如何从此路线重定向到其中一个操作 users#show pages#show

2 个答案:

答案 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'