我有以下路线删除/列出用户.
map.connect 'developer/:user_name/delete',:controller=>"developers",:action=>"delete",:method=>:delete
map.connect 'developer/:user_name/list',:controller=>"developers",:action=>"list",:method=>:get
Run Code Online (Sandbox Code Playgroud)
在通过使用%2E编码Dot来列出用户时,我可以看到成功响应
http://localhost:3000/developer/testuser%2Ehu/list
Run Code Online (Sandbox Code Playgroud)
但在尝试删除包含Dot(.)的用户时,会抛出404错误.
http://localhost:3000/developer/testuser%2Ehu/delete, how to fix this issue.
Run Code Online (Sandbox Code Playgroud)
Jes*_*ott 22
Avdi Grimm撰写了这个主题:http://avdi.org/devblog/2010/06/18/rails-3-resource-routes-with-dots-or-how-to-make-a-ruby-developer-go -a-小位疯狂的/
你会想做这样的事情(完全归功于avdi)
resources :users, :constraints => { :id => /.*/ } do
resources :projects
end
Run Code Online (Sandbox Code Playgroud)
帖子上的评论者说你也可以这样做:
resources :users, :id => /.*/
Run Code Online (Sandbox Code Playgroud)
我刚遇到类似的问题,我的搜索页面网址是/ search/search_term.当search_term有一个点时,Rails会将其解释为请求格式.如果我试图搜索book.html,它实际上搜索了书,因为Rails将html解释为格式.无法识别的格式将返回错误.
在我的情况下,Avdi Grimm的第一个解决方案不起作用,因为我的搜索是分页的,页面编号也在URL中(/ search/book/2).对我来说解决方案是接受所有东西,但是对于search_term(Avdi Grimm的帖子中的最后一个解决方案)的斜线:
resources:users,:constraints => {:id =>/[^\/] + /}
默认情况下,Rails 路由中不允许使用点,因为点被视为页面的扩展。您应该避免在 URL 中使用点。
但是,在您的情况下,您可以指示 Rails 考虑:user_name
传递正则表达式的参数的点。
map.connect 'developer/:user_name/list', :controller => "developers", :action => "list", :method=> :get, :user_name => /[\w.]+/
Run Code Online (Sandbox Code Playgroud)
附言。由于map.connect
,您使用的是非常旧版本的 Rails (Rails < 3)。您应该升级您的应用程序。
归档时间: |
|
查看次数: |
8687 次 |
最近记录: |