没有从 url 获取 [:id] 参数,默认路由不起作用

Posted

技术标签:

【中文标题】没有从 url 获取 [:id] 参数,默认路由不起作用【英文标题】:Not getting a [:id] parameter from url, Default route is not working 【发布时间】:2012-06-17 03:04:11 【问题描述】:

当我请求如下 URL 时:

http://localhost:3000/password_resets/edit/4RghIKJNygEDswIuuCo

我没有得到 [:id] 参数,即 4RghIKJNygEDswIuuCo

这是我的路由文件,需要修改吗?

ActionController::Routing::Routes.draw do |map|

  match 'primary', :to => 'pages#primary', :as => "primary"
  match 'admins', :to => 'admin_users#list', :as => "admins"

  match 'login', :to => 'user_sessions#new', :as => "login"
  match 'logout', :to => 'user_sessions#destroy', :as => "logout"

  root :to =>"public#index"

  match 'HFA/:id/' => 'public#show'
  match 'HFA/:id/:uid' =>'public#show'
  match 'public/projectview/:projectid/' => 'public#projectview'
  map.connect ':controller/:action/:id.:format'
  map.connect ':controller/:action/:id'

  resources :users
  resources :usertypes
  resources :user_sessions
end

【问题讨论】:

:id 在以纯数字形式传入时是否有效?我隐约记得它有一些默认假设,但我可能是错的。 显示 rake routes 命令和相关控制器代码的结果。 【参考方案1】:

默认为/controller/:id/edit,遵循 REST 架构。

你真的要改变这个吗?

如果是,请验证声明的顺序:

Rails 路由按照它们指定的顺序匹配,所以如果你 有资源 :photos above a get 'photos/poll' the show action's 资源行的路线将在获取行之前匹配。到 解决这个问题,将 get 行移到资源行上方,使其成为 首先匹配。

http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

并使用rake routes 命令检查您的可用路线:

http://guides.rubyonrails.org/routing.html#inspecting-and-testing-routes

【讨论】:

【参考方案2】:

如果你使用 match 而不是 'get' 你会得到所有的 http (GET, POST, PUT, DELETE) 路由动词

 get 'password_resets/:id/edit', to: 'password_reset#create', as: :send_password_reset

'to:' 定义控制器方法,'as:' 定义路径名,'get' 定义路由动词,':id' 是 app/views/user_mailer/password_reset 中这一行创建的令牌。文本.erb

<%= send_password_reset_url(@user.password_reset_token) %>

【讨论】:

【参考方案3】:

运行“rake routes”命令并检查“password_resets/edit/4RghIKJNygEDswIuuCo”的路由。

【讨论】:

这是一个答案,还是要求更多数据?无论如何,rake routes 的输出看起来更像password_resets/edit/[:id]。如果设置了资源路由,它可能看起来更像password_resets/[:id]/edit

以上是关于没有从 url 获取 [:id] 参数,默认路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

angular6 路由拼接查询参数如 ?id=1 并获取url参数

如何从 Nuxt 3 服务器获取路由参数

Vue路由器上的可选参数

将动态数据传递给 Vue 参数/路由

express中 获取参数的几种形式

nodejs从路由获取req.param