路由路径的语法差异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了路由路径的语法差异相关的知识,希望对你有一定的参考价值。
在rails路由文件中,指定
Rails.application.routes.draw do
namespace :api, defaults: { format: :json }, :constraints => {:subdomain => "api"} do
将在api.domain.tld/api/[...]
生成一个可操作的URL
要删除重复,可以指定路径。但是,我已经看到:path => "",
和:path => "/",
建议。
这两者之间有什么实际区别?
答案
:path => ""
和:path => "/"
没有区别
例如,使用rake routes
的routes.rb(路径中没有正斜杠)
namespace(:api_namespace, :path=>"v1", :constraints => {:subdomain => "api_subdomain"}) do
resources :todos
end
生成的路线是
api_namespace_todos GET /v1/todos(.:format) api_namespace/todos#index {:subdomain=>"api_subdomain"}
POST /v1/todos(.:format) api_namespace/todos#create {:subdomain=>"api_subdomain"}
new_api_namespace_todo GET /v1/todos/new(.:format) api_namespace/todos#new {:subdomain=>"api_subdomain"}
edit_api_namespace_todo GET /v1/todos/:id/edit(.:format) api_namespace/todos#edit {:subdomain=>"api_subdomain"}
api_namespace_todo GET /v1/todos/:id(.:format) api_namespace/todos#show {:subdomain=>"api_subdomain"}
PUT /v1/todos/:id(.:format) api_namespace/todos#update {:subdomain=>"api_subdomain"}
DELETE /v1/todos/:id(.:format) api_namespace/todos#destroy {:subdomain=>"api_subdomain"}
和routes.rb(在路径中使用正斜杠)
namespace(:api_namespace, :path=>"/v1", :constraints => {:subdomain => "api_subdomain"}) do
resources :todos
end
要么
namespace(:api_namespace, :path=>"v1/", :constraints => {:subdomain => "api_subdomain"}) do
resources :todos
end
用上面代码生成的路由是
api_namespace_todos GET /v1/todos(.:format) api_namespace/todos#index {:subdomain=>"api_subdomain"}
POST /v1/todos(.:format) api_namespace/todos#create {:subdomain=>"api_subdomain"}
new_api_namespace_todo GET /v1/todos/new(.:format) api_namespace/todos#new {:subdomain=>"api_subdomain"}
edit_api_namespace_todo GET /v1/todos/:id/edit(.:format) api_namespace/todos#edit {:subdomain=>"api_subdomain"}
api_namespace_todo GET /v1/todos/:id(.:format) api_namespace/todos#show {:subdomain=>"api_subdomain"}
PUT /v1/todos/:id(.:format) api_namespace/todos#update {:subdomain=>"api_subdomain"}
DELETE /v1/todos/:id(.:format) api_namespace/todos#destroy {:subdomain=>"api_subdomain"}
在两种情况下产生的具有正斜杠(即/)且没有正斜杠的路线完全相同。
它的rails用于处理在URL中正确放置正斜杠,并允许开发人员在语法上更灵活。所以实际上你是否在路径中提出斜线并不重要。
以上是关于路由路径的语法差异的主要内容,如果未能解决你的问题,请参考以下文章