tutorial software rails official framework ejemplos descargar caracteristicas ruby-on-rails ruby-on-rails-3 routing

ruby-on-rails - official - ruby on rails software



Enrutamiento de Rails 3-especificando un controlador exacto desde dentro de un espacio de nombres (4)

Tengo un pequeño problema con los espacios de nombres de rutas que no he encontrado antes. Esto es en realidad parte de un desarrollo de gemas que estoy haciendo, pero he revisado el problema para que se adapte a una situación de rieles más genérica.

Básicamente, tengo una ruta de nombre de nombre, pero quiero que se dirija a un controlador genérico (nivel superior).

Mi controlador es PublishController , que maneja la publicación de muchos tipos diferentes de modelos, todos los cuales se ajustan a la misma interfaz, pero pueden estar bajo diferentes espacios de nombres. Mis rutas se ven así:

# config/routes.rb namespace :manage do resources :projects do get ''publish'' => ''publish#create'' get ''unpublish'' => ''publish#destroy'' end end

El problema es que esto crea las siguientes rutas:

manage_project_publish GET /manage/projects/:project_id/publish(.:format) {:controller=>"manage/publish", :action=>"create"} manage_project_unpublish GET /manage/projects/:project_id/unpublish(.:format) {:controller=>"manage/publish", :action=>"destroy"}

¿Cuál es la ruta que quiero, solo que no se asigna al controlador correcto? He intentado todo lo que se me ocurre intentar y permitir que el controlador no lleve el espacio de nombres, pero estoy perplejo.

Sé que podría hacer lo siguiente:

get ''manage/features/:feature_id/publish'' => "publish#create", :as => "manage_project_publish"

que produce:

manage_project_publish GET /manage/projects/:project_id/publish(.:format) {:controller=>"publish", :action=>"create"}

pero idealmente, preferiría usar la declaración anidada (para facilitar la lectura), si es posible; que estoy empezando a pensar que no lo es.


Creo que lo que quieres es esto:

namespace :manage, module: nil do resources :projects do get ''publish'' => ''publish#create'' get ''unpublish'' => ''publish#destroy'' end end

Esto crea las rutas nombradas como desee (manage_projects ...) pero aún así llama al controlador ::Publish


Si te entiendo bien, quieres esto:

scope :manage do resources :projects, :only => [] do get ''publish'' => ''publish#create'' get ''unpublish'' => ''publish#destroy'' end end

Para realizar estas rutas:

project_publish GET /projects/:project_id/publish(.:format) {:action=>"create", :controller=>"publish"} project_unpublish GET /projects/:project_id/unpublish(.:format) {:action=>"destroy", :controller=>"publish"}

¿Estoy entendiendo tu necesidad correctamente? Si es así, esto es lo que Ryan está explicando.


Use el scope lugar del namespace de namespace cuando desee una ruta con alcance pero no un controlador dentro de un módulo del mismo nombre.


recurso toma un hash opcional donde puede especificar el controlador para

resource :projects do

sería escrito como

resource :projects, :controller=>:publish do