[英]Aliasing a namespaced route in Rails
給出以下routes.rb文件:
# Add Admin section routes
map.namespace :admin do |admin|
admin.resources :admin_users
admin.resources :admin_user_sessions, :as => :sessions
admin.resources :dashboard
# Authentication Elements
admin.login '/login', :controller => 'admin_user_sessions', :action => 'new'
admin.logout '/logout', :controller => 'admin_user_sessions', :action => 'destroy'
# Default is login page for admin_users
admin.root :controller => 'admin_user_sessions', :action => 'new'
end
是否可以將“admin”部分別名為別名,而無需更改應用程序中的每個重定向和link_to? 主要原因是我希望能夠在運行中配置它,並希望它也不易猜測。
map.namespace
方法只為其塊內的路徑設置一些常用選項。 它使用with_options
方法:
# File actionpack/lib/action_controller/routing/route_set.rb, line 47
def namespace(name, options = {}, &block)
if options[:namespace]
with_options({:path_prefix => "#{options.delete(:path_prefix)}/#{name}", :name_prefix => "#{options.delete(:name_prefix)}#{name}_", :namespace => "#{options.delete(:namespace)}#{name}/" }.merge(options), &block)
else
with_options({:path_prefix => name, :name_prefix => "#{name}_", :namespace => "#{name}/" }.merge(options), &block)
end
end
因此可以直接使用with_options
方法而不是namespace
:
map.with_options(:path_prefix => "yournewprefix", :name_prefix => "admin_", :namespace => "admin/" ) do |admin|
admin.resources :admin_users
# ....
end
並且您可以像以前一樣繼續使用路由,但前綴將是“yournewprefix”而不是“admin”
admin_admin_users_path #=> /yournewprefix/admin_users
為了創建命名空間的別名(例如,從另一個路由器地址調用一個api_version
),您可以執行以下操作:
#routes.rb
%w(v1 v2).each do |api_version|
namespace api_version, api_version: api_version, module: :v1 do
resources :some_resource
#...
end
end
這將導致routes /v1/some_resource
和/v2/some_resource
到達同一個控制器。 然后你可以使用params[:api_version]
來獲得你需要的變化並做出相應的反應。
就像在任何其他資源中一樣,:路徑似乎對我來說很好。
namespace :admin, :path => "myspace" do
resources : notice
resources :article do
resources :links , :path => "url"
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.