没有从 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] 参数,默认路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章