Rutas REST

Hola de nuevo, estoy inmerso empapándome de REST y tengo una duda con unas
rutas, ¿cómo puedo configurar el routes para obtener estas urls?:
/ projects /: project_id / iterations
/ projects /: project_id / iterations /: id

map . resources : projects do | projects |
projects . resources : iterations
end

map . resources : iterations ,
: controller => " projects ",
: path_prefix => "/ projects /: project_id ",
: name_prefix => " projects_ "

Creo que de las dos formas se obtiene lo mismo, por cuál optais?

  ______________________________________________

Enviado desde Correo Yahoo! El correo favorito de los internautas.
http://es.docs.yahoo.com/mail/overview/index.html

Yo optaria por la primera, pero si estas usando rails 2 puedes hacerlo
asi

map.resources :projects, :has_many => :iterations

saludos.

On Tue, Apr 8, 2008 at 4:18 PM, Miguel Angel Calleja Lÿffffe1zaro <

Yo también optaría por la primera, para mi es más claro, para hacerlo
mas
claro aún hazlo así:
map.resources :projects do | project |
project.resources :iterations
end

Es importante utilizar bien los plurales y los singulares :slight_smile:

2008/4/8, Juan P. [email protected]:

Emili Parreño escribió:

Aha, muchas gracias a todos por las respuestas, ahora me surje la duda
de crearme unas rutas determinadas:

Tengo un menú estático y dentro de calidad, prevención, medio ambiente y
procedimiento puedo crear No Conformidades y Auditorías que serían dos
controladores:
SGI
CALIDAD
NO CONFORMIDADES (un controlador donde creo no conformidades)
AUDITORIAS (un controlador donde creo auditorías)

PREVENCIÓN
   NO CONFORMIDADES
   AUDITORIAS

MEDIO AMBIENTE
   NO CONFORMIDADES
   AUDITORIAS

PROCEDIMIENTO
   NO CONFORMIDADES
   AUDITORIAS

Se pueden construir las rutas con este formato?:
sgi/calidad/no_conformidades/new
sgi/calidad/no_conformidades/1
sgi/calidad/auditorias/1

sgi/prevencion/no_conformidades/new
sgi/procedimiento/auditorias/1

etc.

Agradecería algún que otro consejo, gracias

Miguel Angel Calleja Lázaro escribió:

   AUDITORIAS

Agradecería algún que otro consejo, gracias


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Debería crearlos así todas las posibilidades?
map.connect ‘sgi/calidad/no_conformidades’,
:conditions=>{:method=>:get},
:controller=> “no_conformidades”,
:action = “index”
map.connect ‘sgi/calidad/no_conformidades’,
:conditions=>{:method=>:post},
:controller=> “no_conformidades”,
:action = “update”

Con algún namespace?

El Wednesday 09 April 2008 11:06:46 Miguel Angel Calleja Lázaro
escribió:

   AUDITORIAS (un controlador donde creo auditorías)
   NO CONFORMIDADES
etc.

map.connect ‘sgi/calidad/no_conformidades’,

Con algún namespace?


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Los namespaces te servirían para añadir el prefijo a las rutas pero tus
controladores tendrian que estar dentro del namespace, si solo quieres
un
prefijo en la ruta puedes usar map.resources con :path_prefix => ‘/sgi’

map.with_options :path_prefix => ‘/sgi’ do |sgi|
sgi.resources :no_conformidades
sgi.resources :auditorias
end

Lo que no se muy bien es como meter lo de calidad, medio ambiente,
prevencion
y procedimiento. ¿Comparten los mismos controladores?

Si no los comparten por ejemplo podrias crearlos dentro de un namespace:
Calidad::NoConformidadesController
Prevencion::NoConformidadesController

Y las rutas serian:
map.with_options :path_prefix => ‘/sgi’ do |sgi|
sgi.namespace :calidad do |calidad|
calidad.resources :no_conformidades
calidad.resources :auditorias
end
end

Creo que tambien funcionaría:
map.with_options :path_prefix => ‘/sgi’ do |sgi|
[:calidad, :medio_ambiente, :prevencion, :procedimiento].each do
|namespace|
sgi.namespace namespace do |space|
space.resources :no_conformidades
space.resources :auditorias
end
end
end


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

El Wednesday 09 April 2008 12:05:51 Miguel Angel Calleja Lázaro
escribió:

dos controladores:
NO CONFORMIDADES

[email protected]

Los namespaces te servirían para añadir el prefijo a las rutas pero tus

end

map.with_options :path_prefix => ‘/sgi/prevencion’ do |sgi|
sgi.resources :no_conformidades
sgi.resources :auditorias
end


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Mas o menos si, pero hay que añadir algo mas para que te cree metodos
diferentes para usar las named routes. Usando el bucle de antes:
[:calidad, :medio_ambiente, :prevencion, :procedimiento].each do
|namespace|
map.with_options :path_prefix => “/sgi/#{namespace}”, :name_prefix
=> “#{namespace}_” do |sgi|
sgi.resources :no_conformidades
sgi.resources :auditorias
end
end

tendrias named routes como:
edit_calidad_auditorias_path
calidad_auditorias_path
edit_prevencion_auditorias_path
prevencion_auditorias_path

Pero no se que haras luego para ver en el controlador si esta entrando
por
calidad o por prevencion por ejemplo. Se podria mirar la url de la
peticion
pero no me gusta mucho. Otra opcion sería:
map.with_options :path_prefix => ‘/sgi/:type’ do |sgi|
sgi.resources :no_conformidades
sgi.resources :auditorias
end

tendrias named routes como:
edit_auditorias_path ‘calidad’, @auditoria
auditorias_path ‘calidad’
edit_auditorias_path ‘prevencion’, @auditoria
auditorias_path ‘prevencion’

Y en el controlador podrias usar params[:type]

Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
escribió:

SGI
AUDITORIAS
sgi/prevencion/no_conformidades/new
http://lists.simplelogica.net/mailman/listinfo/ror-es
:conditions=>{:method=>:post},
Los namespaces te servirían para añadir el prefijo a las rutas pero tus

end

El caso se que si comparten los controladores, porque si no, no sería
nada DRY estar creando los mismos controllers en cada namespace, se
podría poner?

map.with_options :path_prefix => ‘/sgi/calidad’ do |sgi|
sgi.resources :no_conformidades
sgi.resources :auditorias
end

map.with_options :path_prefix => ‘/sgi/prevencion’ do |sgi|
sgi.resources :no_conformidades
sgi.resources :auditorias
end

Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
escribió:

edit_calidad_auditorias_path
end

tendrias named routes como:
edit_auditorias_path ‘calidad’, @auditoria
auditorias_path ‘calidad’
edit_auditorias_path ‘prevencion’, @auditoria
auditorias_path ‘prevencion’

Y en el controlador podrias usar params[:type]

Mas o menos si, pero hay que añadir algo mas para que te cree metodos
Si, pues algo como la segunda opción, leer el type en el controlador, me
has dado unas ideas ya bastante buenas, voy a probarlo todo y si me
surgen dudas las pongo, muchas gracias por todo

El Monday 14 April 2008 14:21:32 Miguel Angel Calleja Lázaro escribió:

:name_prefix=>"#{namespace}" do |section| section.resources :news_articles
{:action=>“create”, :controller=>“news_articles”} POST
/:type/news_articles/:id/edit.:format
/:type/news_articles/:id

18:

<%=h news_article.page_id %>
| entradilla: “asdf”, resumen: “asdf”, page_id: 2, created_at: "2008-04-14

map.resources :news_articles

y si lo quito falla.

Mi pregunta es si estoy haciendo bien el routes, y el error a qué se debe,
debo incluir también el map.resources :news_articles? Gracias de antemano|

El problema es que has credo las rutas con un parametro adicional (type)
y
tienes que pasar ese parametro a todos los metodos como primer
parametro,
incluso en las rutas que normalmente van sin parametros:
Sin el path_prefix /:type normalmente tendrías rutas como:
new_sgi_news_article_path
edit_sgi_news_article_path(news_article)
sgi_news_article_path(news_article)
Con el /:type tienes que usar rutas como:
new_sgi_news_article(‘sgi’)
edit_sgi_news_article_path(‘sgi’, news_article)
sgi_news_article_path(‘sgi’, news_article)

Así que en la linea 19 tienes que cambiar news_article por
sgi_news_article_path(news_article)

De todos modos en el routes.rb no hace falta que uses el with_options si
luego
solo tienes una linea, el with_options es para no escribir varias veces
las
mismas opciones y que se usen en varias lineas. Sería lo mismo si
pusieras:
[:sgi, :rrhh, :sistemas, :subcontratas].each do |namespace|
map.resources :news_articles, :path_prefix
=> “/:type”, :name_prefix=>"#{namespace}"
end

Yo cambiaría la definición de las rutas, porque no veo necesidad de
tener
varios metodos que crean la misma ruta, y pondria:
map.resources :news_articles, :path_prefix => “/:type”
Entonces tendrías que usar rutas como:
new_news_article(‘sgi’)
edit_news_article_path(‘sgi’, news_article)
news_article_path(‘sgi’, news_article)

Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
escribió:

edit_sgi_news_article_path(‘sgi’, news_article)
=> “/:type”, :name_prefix=>"#{namespace}"
end

Yo cambiaría la definición de las rutas, porque no veo necesidad de tener
varios metodos que crean la misma ruta, y pondria:
map.resources :news_articles, :path_prefix => “/:type”
Entonces tendrías que usar rutas como:
new_news_article(‘sgi’)
edit_news_article_path(‘sgi’, news_article)
news_article_path(‘sgi’, news_article)

Cierto, que fallo …, llevo poco tiempo con REST y se me había pasado
totalmente que tengo que pasar el parámetro … Bueno, de los errores
se aprende, ya no se me olvidará. Gracias por tu tiempo y por la ruta
simplificada

|Buenas, estoy tratando de crearme las rutas para un controlador “news_articles”, tengo 4 secciones donde cada una pueden tener noticias:
sgi, rrhhh, sistemas, subcontratas.

En routes.rb tengo:

Las 4 secciones las trato como algo estático, no son controladores,

los pongo en la url para que quede constancia de dónde se está.
[:sgi, :rrhh, :sistemas, :subcontratas].each do |namespace|
map.with_options :path_prefix => “/:type”,
:name_prefix=>"#{namespace}" do |section|
section.resources :news_articles
end
end

Así, obtengo las siguientes rutas:
sgi_news_articles GET /:type/news_articles
{:action=>“index”, :controller=>“news_articles”}
formatted_sgi_news_articles GET
/:type/news_articles.:format
{:action=>“index”, :controller=>“news_articles”}
POST /:type/news_articles
{:action=>“create”, :controller=>“news_articles”}
POST
/:type/news_articles.:format
{:action=>“create”, :controller=>“news_articles”}
new_sgi_news_article GET
/:type/news_articles/new
{:action=>“new”, :controller=>“news_articles”}
formatted_new_sgi_news_article GET
/:type/news_articles/new.:format
{:action=>“new”, :controller=>“news_articles”}
edit_sgi_news_article GET
/:type/news_articles/:id/edit
{:action=>“edit”, :controller=>“news_articles”}
formatted_edit_sgi_news_article GET
/:type/news_articles/:id/edit.:format
{:action=>“edit”, :controller=>“news_articles”}
sgi_news_article GET
/:type/news_articles/:id
{:action=>“show”, :controller=>“news_articles”}
formatted_sgi_news_article GET
/:type/news_articles/:id.:format
{:action=>“show”, :controller=>“news_articles”}
PUT
/:type/news_articles/:id
{:action=>“update”, :controller=>“news_articles”}
PUT
/:type/news_articles/:id.:format
{:action=>“update”, :controller=>“news_articles”}
DELETE
/:type/news_articles/:id
{:action=>“destroy”, :controller=>“news_articles”}
DELETE
/:type/news_articles/:id.:format
{:action=>“destroy”, :controller=>“news_articles”}

y lo mismo para rrhh, sistemas y subcontratas.

Lo que pretendo son estas rutas:
/sgi/news_articles
/sgi/news_articles/1
/rrhh/news_articles/2

Tengo un error en la línea 19 de mi vista index.
|

En mi vista tengo:

Extracted source (around line #19):

|16:

<%=h news_article.entradilla %>
17: <%=h news_article.resumen %>
18: <%=h news_article.page_id %>
19: <%= link_to ‘Show’, news_article %>
20: <%= link_to ‘Edit’,
edit_news_article_path(news_article)%>
21: <%= link_to ‘Destroy’, news_article, :confirm => ‘Are you
sure?’, :method => :delete %>
22:

<%= link_to ‘New news_article’, new_news_article_path %>|

Showing /news_articles/index.html.erb/ where line #19 raised:

|news_article_url failed to generate from {:type=>#<NewsArticle id: 1, hidden: false, deleted: false, titulo: “prueba”, fecha: “2008-04-14”, entradilla: “asdf”, resumen: “asdf”, page_id: 2, created_at: “2008-04-14 11:12:41”, updated_at: “2008-04-14 11:12:41”>, :controller=>“news_articles”, :action=>“show”}, expected: {:controller=>“news_articles”, :action=>“show”}, diff: {:type=>#<NewsArticle id: 1, hidden: false, deleted: false, titulo: “prueba”, fecha: “2008-04-14”, entradilla: “asdf”, resumen: “asdf”, page_id: 2, created_at: “2008-04-14 11:12:41”, updated_at: “2008-04-14 11:12:41”>}|

|Ese error lo soluciono si añado también en routes.rb:

map.resources :news_articles

y si lo quito falla.

Mi pregunta es si estoy haciendo bien el routes, y el error a qué se
debe, debo incluir también el map.resources :news_articles? Gracias de
antemano|

Esto te podría servir:

map.resources :projects,
:has_many => [:iterations]

Buenas, tengo otra duda con otro problemilla que me da. Pretendo generar
un nuevo share para un determinado non_conformity
(new_non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/new):

En mi routes:
map.with_options :path_prefix => ‘/sgi/:type’ do |sgi|
sgi.resources :non_conformities do |non_conformity|
non_conformity.resources :shares
end
end

Me genera estas rutas:
non_conformities GET
/sgi/:type/non_conformities
{:action=>“index”, :controller=>“non_conformities”}
formatted_non_conformities GET
/sgi/:type/non_conformities.:format
{:action=>“index”, :controller=>“non_conformities”}
POST
/sgi/:type/non_conformities
{:action=>“create”, :controller=>“non_conformities”}
POST
/sgi/:type/non_conformities.:format
{:action=>“create”, :controller=>“non_conformities”}
new_non_conformity GET
/sgi/:type/non_conformities/new
{:action=>“new”, :controller=>“non_conformities”}
formatted_new_non_conformity GET
/sgi/:type/non_conformities/new.:format
{:action=>“new”, :controller=>“non_conformities”}
edit_non_conformity GET
/sgi/:type/non_conformities/:id/edit
{:action=>“edit”, :controller=>“non_conformities”}
formatted_edit_non_conformity GET
/sgi/:type/non_conformities/:id/edit.:format
{:action=>“edit”, :controller=>“non_conformities”}
non_conformity GET
/sgi/:type/non_conformities/:id
{:action=>“show”, :controller=>“non_conformities”}
formatted_non_conformity GET
/sgi/:type/non_conformities/:id.:format
{:action=>“show”, :controller=>“non_conformities”}
PUT
/sgi/:type/non_conformities/:id
{:action=>“update”, :controller=>“non_conformities”}
PUT
/sgi/:type/non_conformities/:id.:format
{:action=>“update”, :controller=>“non_conformities”}
DELETE
/sgi/:type/non_conformities/:id
{:action=>“destroy”, :controller=>“non_conformities”}
DELETE
/sgi/:type/non_conformities/:id.:format
{:action=>“destroy”, :controller=>“non_conformities”}
non_conformity_shares GET
/sgi/:type/non_conformities/:non_conformity_id/shares
{:action=>“index”, :controller=>“shares”}
formatted_non_conformity_shares GET
/sgi/:type/non_conformities/:non_conformity_id/shares.:format
{:action=>“index”, :controller=>“shares”}
POST
/sgi/:type/non_conformities/:non_conformity_id/shares
{:action=>“create”, :controller=>“shares”}
POST
/sgi/:type/non_conformities/:non_conformity_id/shares.:format
{:action=>“create”, :controller=>“shares”}
new_non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/new
{:action=>“new”, :controller=>“shares”}
formatted_new_non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/new.:format
{:action=>“new”, :controller=>“shares”}
edit_non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/:id/edit
{:action=>“edit”, :controller=>“shares”}
formatted_edit_non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/:id/edit.:format
{:action=>“edit”, :controller=>“shares”}
non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/:id
{:action=>“show”, :controller=>“shares”}
formatted_non_conformity_share GET
/sgi/:type/non_conformities/:non_conformity_id/shares/:id.:format
{:action=>“show”, :controller=>“shares”}
PUT
/sgi/:type/non_conformities/:non_conformity_id/shares/:id
{:action=>“update”, :controller=>“shares”}
PUT
/sgi/:type/non_conformities/:non_conformity_id/shares/:id.:format
{:action=>“update”, :controller=>“shares”}
DELETE
/sgi/:type/non_conformities/:non_conformity_id/shares/:id
{:action=>“destroy”, :controller=>“shares”}
DELETE
/sgi/:type/non_conformities/:non_conformity_id/shares/:id.:format
{:action=>“destroy”, :controller=>“shares”}

Desde mi controlador redirijo de la siguiente manera, paso como
parámetros el :type y el :non_conformity_id:
redirect_to
new_non_conformity_share_path("#{params[:type]}",@non_conformity.id)

la ruta la hace bien:
http://mi_app.net/sgi/quality/non_conformities/42/shares/new

pero obtengo el siguiente error en la vista /shares/new:

|undefined method `shares_path’ for #ActionView::Base:0x2afd3638b270|

Extracted source (around line #5):

|2:
3: <%= error_messages_for :share %>
4:
5: <% form_for(@share) do |f| %>
6:


7: Hidden

8: <%= f.check_box :hidden %>
|

Le he pasado los parámetros correctos en la ruta, pero parece desconocer
shares_path, debo añadir en mi routes el map.resources :shares también?
pensaba que con el routes que tengo ahora me generaría el shares bien.
Agradecería una manita, gracias.

El Wednesday 16 April 2008 09:59:31 Miguel Angel Calleja Lázaro
escribió:

Le he pasado los parámetros correctos en la ruta, pero parece desconocer
shares_path, debo añadir en mi routes el map.resources :shares también?
pensaba que con el routes que tengo ahora me generaría el shares bien.
Agradecería una manita, gracias.

Cuando haces un recurso anidado dentro de otro tienes que cambiar las
vistas
para usar las rutas anidadas. Tienes que cambiar form_for por algo como:
<% form_for(@share, :url =>
non_conformity_share_path(@share.non_conformity.type,
@share.non_conformity,
@share)) do |f| %>

Creo que sería así, igual no esta bien la forma de obtener los
parametros para
non_conformity_share_path, pero tienes que usar :url


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

El Wednesday 16 April 2008 11:56:11 Miguel Angel Calleja Lázaro
escribió:

para non_conformity_share_path, pero tienes que usar :url
redirect_to non_conformities_path (params[:type])

Ambas funcionan, pero se supone que tengo que pasar el parámetro :type
si es requerido en la ruta no?

Si, yo creo que da error si no pasas los parametros correctos, pero
hasta que
no se ejecuta la funcion no da error, asi que si nunca se ha llegado a
ejecutar el redirect_to no te habría llegado a dar error.


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
escribió:

Si, exactamente es éso, gracias
<% form_for(:share,
:url=>non_conformity_shares_path("#{@type}",@non_conformity_id)) do |f|
%>

Me va quedando ya todo más claro, tengo la duda de que en alguna ruta
donde tengo que pasarle el :type no se lo he puesto y ha funcionado
igual, tal como:
redirect_to non_conformities_path
redirect_to non_conformities_path (params[:type])

Ambas funcionan, pero se supone que tengo que pasar el parámetro :type
si es requerido en la ruta no?

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