2010-05-05 45 views
3

一個命名空間的途徑給予以下的routes.rb文件:混疊的Rails

# 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 

是否有可能別名「管理」部分,別的東西,而無需更改應用程序中的每一個重定向和的link_to?主要原因在於,我希望能夠即時進行配置,並希望能夠使其不易猜測。

回答

7

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_users_path #=> /yournewprefix/admin_users 
+0

Thx工作完美! – khelal 2010-05-08 08:43:46

4

爲了創建別名命名空間(呼喚一個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 

這將導致路由/v1/some_resource/v2/some_resource去同一個控制器。那麼你可以使用params[:api_version]來獲得你需要的evrsion並做出相應的迴應。

3

像其他任何資源一樣,path似乎對我來說工作得很好。

namespace :admin, :path => "myspace" do 
    resources : notice 
    resources :article do 
     resources :links , :path => "url" 
    end 
    end 
end