Cambiando los ROUTES

Hola a todos,

Estoy trabajando en un app donde quiero hacer unos cambios en las rutas
que estan siendo generadas. Tengo lo siguiente:

#—
map.resources :groups do |groups|
groups.resources :events, :member => { :invite => :get }
end
#—

Por lo anterior mis eventos se estan mapeando asi:

#—
www.xxx.com/groups/1/events/2
#—

Lo que quiero hacer es sacar el ‘groups’ de ahi y dejar unicamente el
id. Algo asi:

#—
www.xxx.com/1/events/2
#—

Intente algo como lo siguiente y ahora tengo una ruta que funciona:

#—
map.events ‘:group_id/events’, :controller => ‘events’, :action =>
‘index’
#—

Mi pregunta es: Deberia entonces repetir esta misma linea 5 o mas veces
para mapear todas las acciones, eso sin incluir ni siquiera las acciones
member.
Parece que al usar map.resources no hay ninguna otra manera de sacar el
nombre del controlador de la ruta y, por otro lado, mapear cada ruta de
manera independiente puede ser una tarea tediosa y larga:

map.events_new …
map.events_create…

Hay alguna otra manera de hacer esto?

Gracias por su atencion (y disculpen el no uso de tildes por esta vez),

Elías

Elias O. wrote:

#—
map.resources :groups do |groups|
groups.resources :events, :member => { :invite => :get }
end
#—

Por lo anterior mis eventos se estan mapeando asi:
#—
www.xxx.com/groups/1/events/2
#—

Lo que quiero hacer es sacar el ‘groups’ de ahi y dejar unicamente el
id. Algo asi:
#—
www.xxx.com/1/events/2
#—

Intente algo como lo siguiente y ahora tengo una ruta que funciona:
#—
map.events ‘:group_id/events’, :controller => ‘events’, :action =>
‘index’
#—

Mi pregunta es: Deberia entonces repetir esta misma linea 5 o mas veces
para mapear todas las acciones, eso sin incluir ni siquiera las acciones
member.

Meter una línea por cada acción es una chapuza… Prueba esto:
map.resources :events, :path_prefix => ‘/:group_id’

s2

Fernando C. wrote:

Elias O. wrote:

#—
map.resources :groups do |groups|
groups.resources :events, :member => { :invite => :get }
end
#—

Por lo anterior mis eventos se estan mapeando asi:
#—
www.xxx.com/groups/1/events/2
#—

Lo que quiero hacer es sacar el ‘groups’ de ahi y dejar unicamente el
id. Algo asi:
#—
www.xxx.com/1/events/2
#—

Intente algo como lo siguiente y ahora tengo una ruta que funciona:
#—
map.events ‘:group_id/events’, :controller => ‘events’, :action =>
‘index’
#—

Mi pregunta es: Deberia entonces repetir esta misma linea 5 o mas veces
para mapear todas las acciones, eso sin incluir ni siquiera las acciones
member.

Meter una línea por cada acción es una chapuza… Prueba esto:
map.resources :events, :path_prefix => ‘/:group_id’

s2

Amigo muchas gracias, me ha funcionado perfecto. Es lo que buscaba.

Nuevamente gracias,

Elías

Me explico mas por si acaso:

Si tengo lo siguiente:

map.resources :groups do |groups|
groups.resources :posts
end

Normalmente esto seria groups/1/posts/1

Pero quiero que el URL solo muestre posts/1 y mantener el group_id y el
nombre del controlador (groups) invisible.

Gracias nuevamente,

Elías

Me ha surgido otra pregunta. Por ejemplo:

Como haria si quiero manejar el path_prefix /:group_id/ en la ruta (lo
necesitare para hacer unos queries), pero no quiero que este se vea en
el URL en el navegador. Hay alguna manera de hacer esto?

Gracias,

Elías

Elias O. wrote:

Me explico mas por si acaso:

Si tengo lo siguiente:

map.resources :groups do |groups|
groups.resources :posts
end

Normalmente esto seria groups/1/posts/1

Pero quiero que el URL solo muestre posts/1 y mantener el group_id y el
nombre del controlador (groups) invisible.

Gracias nuevamente,

Elías

Necesito ese group_id para hacer unos queries en el posts_controller

Elías

Quisiera explicar el asunto de manera larga:

El app que estoy creando gira en torno al concepto de grupos. Un usuario
puede pertenecer a varios grupos y crear eventos y posts en cada uno. Se
necesita que las rutas de los usuarios no esten precedidas por el
group_id. Por ende, un perfil de usuario mostrara toda su actividad en
los dfts grupos.

Pero si una esta navegando en un grupo y luego accedo al perfil de un
usuario que ha creado un evento esto me llevara a su perfil y todos los
links de los menus de eventos y posts se dañaran pues esos enlaces
fueron creados con el group_id y ahora no hay referencia del grupo al
que estaba navegando. Es por eso que queria guardar la referencia del
grupo escondida. Bueno ese es el problema en version larga.

Gracias,

Elías

Elias O. wrote:

Quisiera explicar el asunto de manera larga:

El app que estoy creando gira en torno al concepto de grupos. Un usuario
puede pertenecer a varios grupos y crear eventos y posts en cada uno. Se
necesita que las rutas de los usuarios no esten precedidas por el
group_id. Por ende, un perfil de usuario mostrara toda su actividad en
los dfts grupos.

Pero si una esta navegando en un grupo y luego accedo al perfil de un
usuario que ha creado un evento esto me llevara a su perfil y todos los
links de los menus de eventos y posts se dañaran pues esos enlaces
fueron creados con el group_id y ahora no hay referencia del grupo al
que estaba navegando. Es por eso que queria guardar la referencia del
grupo escondida. Bueno ese es el problema en version larga.

Gracias,

Elías

Si un usuario puede pertenecer a varios grupos, el post también podría
pertenecer a varios grupos, así que si no metes el group_id de algún
modo la información será ambigua y no se podrá resolver (sería
imposible). Dicho esto, si no quieres pasar el group_id en la URL, hay
soluciones peores pero que podrían funcionar: meterlo en las cookies,
hacer llamadas post con ese parámetro no visible en la url, etc. Pero
son soluciones poco recomendables, que aunque en el 90% de los casos
funcionarán, inevitablemente darán problemas.

Otra opción que es costosa pero si funcionaría es hacer una tabla donde
asignes un id único a cada combinación de group_id+post_id, y luego
trabajar con esa tabla, haciendo un before_filter que te reemplace el id
de esa tabla por sus correspondientes id’s de grupo y post. Pero esto
parece matar moscas a cañonazos, lo suyo es trabajar con el id de grupo
en la url…

s2

Te sir ve esto ?

before_filter :get_collection

def get_collection
@collection = Post.find(params[:id]).collection
end

2008/11/14 Elias O. [email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs