2015-12-04 3 views
0

В чем разница между resources и namespace?Ресурсы против пространства имен в маршрутах Rails

У меня есть приложение Rack внутри gem, которое я хочу позвонить из Rails.

namespace :app do 
    get 'go', to: Gem::Controller.new 
end 

Поскольку у меня есть контроллер под названием AppController, могу ли я использовать его?

resources :app do 
    collection do 
    get 'go', to: Gem::Controller.new 
    end 
end 

Какой способ лучше?

ответ

1

В соответствии с Rails guide routing section

Ресурсы:

маршрутизации ресурсов позволяет быстро объявлять все общие маршрутов для данного находчивого контроллера. Вместо объявления отдельных маршрутов для вашего индекса, показывать, обновлять, редактировать, создавать, обновлять и уничтожать действия, находчивый маршрут объявляет их в одной строке кода .

Пространство имен:

Вы можете организовать группы контроллеров под пространством имен. Обычно , вы можете сгруппировать ряд административных контроллеров под номером a Admin :: namespace. Вы должны разместить эти контроллеры под каталогом приложений/контроллеров/admin , и вы можете сгруппировать их вместе в вашего маршрутизатора.

Например:

namespace :admin do 
    resources :articles, :comments 
end 

Но, я думаю, что ты имел в виду, чтобы выбрать между сбором и пространства имен.

Это похоже на то, что пространство имен будет лучшим вариантом, если вы планируете иметь больше маршрутов для этого приложения. Кроме того, вы можете просто использовать его в качестве коллекции.

1

resources является ярлыком для генерации семи маршрутов, необходимых для интерфейса REST.

так resources :app будет генерировать следующие семь маршрутов (лоскут и поместить маршруты одинаковы):

get "apps"   => "apps#index", :as => 'apps' 
get "apps/:id"  => "apps#show", :as => 'app' 
get "apps/new"  => "apps#new",  :as => 'new_app' 
post "apps"   => "apps#create", :as => 'apps' 
get "apps/:id/edit" => "apps#edit", :as => 'edit_app' 
patch "apps/:id"  => "apps#update", :as => 'app' 
put "apps/:id"  => "apps#update", :as => 'app' 
delete "apps/:id"  => "apps#destroy", :as => 'app' 

, а затем он будет генерировать другой маршрут из-за get 'go', to: Gem::Controller.new:

/apps/go

В случае пространства имен apps не будут созданы семь маршрутов REST, но будет создан именованный маршрут для apps/go.

Смежные вопросы