Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中一条路线的两个动作_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails中一条路线的两个动作

Ruby on rails Rails中一条路线的两个动作,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有这样的问题: 我有两种型号:用户和页面 用户和页面具有字段url。 所以我有路线 get':url'=>'用户#显示'和get':url'=>'页面#显示' 我应该如何从该路由重定向到用户显示或页面显示的某个操作?url和操作之间存在一对一的关系。所以/url可以是显示给用户的,也可以是显示页面的,但不能同时显示两者 听起来您可能需要两个单独的路由,一个用于/users/url和/pages/url,在这种情况下,您可能需要如下路由 match 'users/url' => 'user

我有这样的问题:
我有两种型号:用户页面
用户页面具有字段url。
所以我有路线
get':url'=>'用户#显示'
get':url'=>'页面#显示'


我应该如何从该路由重定向到用户显示或页面显示的某个操作?

url和操作之间存在一对一的关系。所以/url可以是显示给用户的,也可以是显示页面的,但不能同时显示两者

听起来您可能需要两个单独的路由,一个用于/users/url和/pages/url,在这种情况下,您可能需要如下路由

match 'users/url' => 'users#show'
match 'page/url' => 'pages#show'

您首先需要一个代理操作,该操作检查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

我想如果你想的话,你可以呈现一些模板而不是重定向,但我会使用重定向

这绝对是构建路由的更好方法。我知道这个解决方案,但我需要没有用户/和页面/的链接。我想将这部分代码移动到两个控制器上。正如我在最后所说的,您可以渲染模板而不是重定向,只需执行“渲染模板:”users/show“谢谢。我会这样做。请确保完成所有before_过滤器/操作,并实例化模板所需的所有变量