Ayuda con fichero rutas

Hola a todos,
estoy realizando una pequeña aplicación donde la gente se puede dar de
alta. Una vez dado de alta el usuario, este pueda editar su cuenta, he
creado la siguiente ruta:

map.settings ‘settings’, :controller => ‘users’, :action => ‘edit’

El problema que tengo es que la aplicacion tiene un apartado /admin
donde sólo podrá acceder un usuario con roles de administrador. Dentro
de admin, el administrador podrá editar también las cuentas de los
usuarios, pero con el añadido que saldrán más campos en el formulario,
como por ejemplo seleccionar si el usuario será administrador.

Aquí es donde se me plantea el problema, necesito dos rutas para editar
los usuairos. La primera de arriba está clara; pero ¿como puedo añadir
otra ruta que me haga otro edit diferente al anterior?

No se si me he explicado, pero gracias a todos por la ayuda.

Perdón, también tengo la ruta:

map.resources :users

Lo que planteas se puede hacer de muchas maneras. En función de qué
métodos uses en el controlador, necesitarás unas rutas u otras. Ten en
encuenta que:

map.resources :users

no es una ruta, son varias, ya que el método resources [1] realmente
te está generando rutas a dos 7 métodos de la filosofía REST:

GET /emails/ {:action=>“index”,
:controller=>“emails”}
GET /emails.:format/ {:action=>“index”,
:controller=>“emails”}
POST /emails/ {:action=>“create”,
:controller=>“emails”}
POST /emails.:format/ {:action=>“create”,
:controller=>“emails”}
GET /emails/new/ {:action=>“new”,
:controller=>“emails”}
GET /emails/new.:format/ {:action=>“new”,
:controller=>“emails”}
GET /emails/:id;edit/ {:action=>“edit”,
:controller=>“emails”}
GET /emails/:id.:format;edit/ {:action=>“edit”,
:controller=>“emails”}
GET /emails/:id/ {:action=>“show”,
:controller=>“emails”}
GET /emails/:id.:format/ {:action=>“show”,
:controller=>“emails”}
PUT /emails/:id/ {:action=>“update”,
:controller=>“emails”}
PUT /emails/:id.:format/ {:action=>“update”,
:controller=>“emails”}
DELETE /emails/:id/ {:action=>“destroy”,
:controller=>“emails”}
DELETE /emails/:id.:format/ {:action=>“destroy”,
:controller=>“emails”}

Para ver las rutas con las que estás trabajando en un momento dado te
recomiendo que hagas:

$ ruby script/console

rs = ActionController::Routing::Routes
puts rs.routes

Si cambias el routes.rb puedes hacer:

rs.reload

Yo lo que te recomiendo, para no alejarte de la filosofía REST es que
tengas una única ruta para editar el usuario. Eso sí, de alguna manera
tendrás que tener en cuenta la seguridad. Tienes que evitar, por
ejemplo, que un usuario no admin pueda construirse y enviar un
formulario para hacerse admin.

Si ya trabajas con el plugin restful_authentication [2] te recomiendo
utilizar, para la gestión de roles, el plugin acl_system [3]. Funciona
muy bien y es muy sencillo.

Salu2,

Javi

[1]
http://api.rubyonrails.org/classes/ActionController/Resources.html#M000176
[2] http://agilewebdevelopment.com/plugins/restful_authentication
[3] http://agilewebdevelopment.com/plugins/acl_system

2007/9/27, Mario S. [email protected]: