Псевдоним маршрутного пространства в Rails - PullRequest
3 голосов
/ 05 мая 2010

Имеется следующий файл rout.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 в приложении? Основная причина в том, что мне бы хотелось, чтобы это можно было настраивать на лету, и, надеюсь, сделать его также менее легким для догадки.

Ответы [ 3 ]

7 голосов
/ 06 мая 2010
Метод

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

И вы можете продолжать использовать маршруты так же, как и раньше, но префиксом будет «ваш новый префикс» вместо «admin»

admin_admin_users_path #=> /yournewprefix/admin_users
5 голосов
/ 15 сентября 2013

Чтобы создать псевдоним для пространства имен (например, вызывая один 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], чтобы получить необходимое вам слово и ответить соответствующим образом.

3 голосов
/ 05 мая 2015

Как и на любом другом ресурсе, мне кажется, что путь работает нормально.

namespace :admin, :path => "myspace" do
  resources : notice 
    resources :article do 
      resources :links , :path => "url"
    end 
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...