REST anidados


#1

Hola, este es mi primer post. Estoy empapandome de ror, empezando desde
cero para poder sacar un PFC adelante.
Me ha surgido una duda a la hora de hacer un Rest anidado, es decir mi
intencion es que en el navegador siga un orden “logico”. Os comento mi
idea:

casa: tiene direccion
ladrillo: tiene una cantidad cantidad por cada casa

Mi proceso a seguir:

  1. creo scaffold de casa-> ruby script/generate scaffold casa
    direccion:text
  2. lo mismo con ladrillo-> ruby script/generate scaffold ladrillo
    cantidad:integer
    3)rake db:migrate
  3. en los modelos->relacion uno a muchos

class Casa < ActiveRecord::Base
has_many :ladrillos
end

class Ladrillo < ActiveRecord::Base
belongs_to :casa
end

Por ultimo como mi intencion es poder acceder con una ruta de este tipo:
http://localhost:3000/casas/1/ladrillos/new
–dentro de la primera casa puedo editar crear etc la cantidad de
ladrillos, es decir la casa 1 puede tener 30 ladrillos y la 2 ponerle
40—

Me voy al routes.rb

ActionController::Routing::Routes.draw do |map|

map.resources :casas do |casa|
casa.resources :ladrillos
end

map.connect ‘:controller/:action/:id’
map.connect ‘:controller/:action/:id.:format’
end

Por loq eu he leido se supone que asi creo la ruta rest de la forma en
que yo la quiero, pero no hay manera, cada vez qeu ejecuto el servido e
intento ejecutar una ruta de estas caracteristicas me dice:

undefined method `ladrillos_path’ for #ActionView::Base:0x4793ae8

Extracted source (around line #5):

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


7: Tamano

8: <%= f.text_field :tamano %>

¿Que hago mal?
No se supone que al anidar las rutas no deberia existir este problema??

gracias por las respuestas.

Un saludo


#2

Al estar anidadas las rutas, no puedes crear la de un ladrillo sin
pasarle también su casa. en tu caso lo que creo que necesitas cambiar
(he hecho una lectura muy rápida) es el form_for:

form_for([@ladillo.casa, @ladrillo])

por ejemplo.

un saludo,

2008/10/26 Jose vicente Ribera pellicer
removed_email_address@domain.invalid:

Mi proceso a seguir:

Me voy al routes.rb

3: <%= error_messages_for :ladrillo %>
gracias por las respuestas.

Un saludo

Posted via http://www.ruby-forum.com/.


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


Sergio Gil Pérez de la Manga
e-mail > removed_email_address@domain.invalid
blog > http://www.lacoctelera.com/porras
now > http://twitter.com/porras


#3

como tienes los recursos anidados, tu path sería
casa_ladrillos_path(casa) y para el formulario sería algo así : <%=
form_for [@casa, @ladrillo] do |f| %>
cuando no sepas muy bien qué paths tienes disponibles, ejecuta la tarea
rake routes que te las dice todas. a mi me ayuda bastante.

Saludos.

Jose vicente Ribera pellicer escribió:

Mi proceso a seguir:

Me voy al routes.rb

3: <%= error_messages_for :ladrillo %>
gracias por las respuestas.

Un saludo


/**


#4

sobre lo paths lo que he intentado y me da error :frowning:
En el index de casa

1:<% for casa in @casas %>
2:
3: <%=h casa.direccion %>
4: <%=h casa.pais %>
5: <%= link_to casa.direccion, ladrillos_path(casa)%>
6: …

la linea:

<%= link_to casa.direccion, ladrillos_path(casa)%>
en teoria no deberia de ser un link en la direccion de la casa que me
llevara al index de ladrillos??? (esta claro que como no he tocado
nada del controlador de ladrillos me saldrian los ladrillos de todas las
casas y no el que cree en cada casa pues no identifico a cual pertenecen
previamente. Pero en lugar de esto me escupe el error

undefined method `ladrillos_path’ for #ActionView::Base:0x580b574

He hecho lo de rake routes y me pone:
1: :action=>index :controller=>ladrillos
2: casa_ladrillos GET /casas/:casa_id/ladrillos.format:

la ruta es la que deberia ser,casas/identificador de la casa/ladrillos
de la casa.

Por otro lado he intentado cambiar ladrillos_path(casa) por
1: :action=>index :controller=>ladrillos vamos mandarlo a pelo donde
quiero y me aparece el error :
undefined local variable or method `new_ladrillo_path’ for
#ActionView::Base:0x47d2824

logicamente ahora en el navegador se lee:http://localhost:3000/ladrillos
pues ya no respeto el modo REST.

Una ayudita porfavor, me tiene un poco fastidiadillo el tema


#5

Es como si se hubiese olvidado de los paths de ladrillos no?


#6

revisa bien los correos porque lo sigues haciendo mal. el método sería
casa_ladrillos_path(casa) y ante la duda, ejecuta la tarea rake routes

saludos

Jose vicente Ribera pellicer
escribió:> sobre lo paths lo que he intentado y me da error :frowning:

en teoria no deberia de ser un link en la direccion de la casa que me
2: casa_ladrillos GET /casas/:casa_id/ladrillos.format:
logicamente ahora en el navegador se lee:http://localhost:3000/ladrillos
pues ya no respeto el modo REST.

Una ayudita porfavor, me tiene un poco fastidiadillo el tema


/**


#7

avanzamos un poco…
Si quito la ultima linea:
<%= link_to ‘New ladrillo’, new_ladrillo_path %>

si me deja entrar en el index de ladrillos con la ruta rest

http://localhost:3000/casas/1/ladrillos

eso si, no puedo hacer nada, pero al menos avanzamos


#8

Borja Martín wrote:

revisa bien los correos porque lo sigues haciendo mal. el m�todo ser�a
casa_ladrillos_path(casa) y ante la duda, ejecuta la tarea rake routes

saludos

Jose vicente Ribera pellicer
escribi�:> sobre lo paths lo que he intentado y me da error :frowning:

en teoria no deberia de ser un link en la direccion de la casa que me
2: casa_ladrillos GET /casas/:casa_id/ladrillos.format:
logicamente ahora en el navegador se lee:http://localhost:3000/ladrillos
pues ya no respeto el modo REST.

Una ayudita porfavor, me tiene un poco fastidiadillo el tema


/**

Lo he puesto tal cual y me pasa esto
http://localhost:3000/casas->lo permite, pero cuando selecciono el link
que me lleve a ladrillos me produce error:

Showing ladrillos/index.html.erb where line #20 raised:

undefined local variable or method `new_ladrillo_path’ for
#ActionView::Base:0x49193cc

Extracted source (around line #20):

17:
18:

19:
20: <%= link_to ‘New ladrillo’, new_ladrillo_path %>

el index de ladrillo es asi:

Listing ladrillos

<% for ladrillo in @ladrillos %>

<% end %>
Tamano
<%=h ladrillo.tamano %> <%= link_to 'Show', ladrillo %> <%= link_to 'Edit', edit_ladrillo_path(ladrillo) %> <%= link_to 'Destroy', ladrillo, :confirm => 'Are you sure?', :method => :delete %>

<%= link_to ‘New ladrillo’, new_ladrillo_path %>

Ju, el fallo esta en el index de ladrillo, si me explicarais como usar
el routes para solucionarlo estaria muy agradecido, he estado usando al
buscador para ver si habia algun post del estilo, pero las preguntas que
se hacen del rest son mas avanzadas.


#9

Me respondo a mi mismo, y a futuros novatos que algun dia se encuentren
en mi tesitura… lo coreccto ahora es poner:

<%= link_to ‘New ladrillo’, new_casa_ladrillo_path %>

en lugar de

<%= link_to ‘New ladrillo’, new_ladrillo_path %>

esto como bien indicaban se saca con rake routes del que podemos ver
cada la ruta de cada controlador!accion, escribiendola talcual y
finalizandola con path sacamos la direccion correcta.

PD…No hay otra forma mas automatixada de hacerlo+ es decir, esta
relacion es bastante sencilla, pero si un proyecto va creciendo serian
demasiado cambios, no se tengo la intuicion de que algo se escapase.


#10

Por solucionar la duda al 100).
Como le puedo pasar a @ladrillos la id de la casa. En
<)form_for [@casa, @ladrillo] do |f| %>

para que busque los ladrillos de la casa, asi da error, por lo visto a
@casa le da valor nil


#11

2008/10/26 Sergio Gil Pérez de la Manga removed_email_address@domain.invalid:

Otra opción es tirar por plugins como ResourceController (y hay alguno
más parecido) que hacen una especie de scaffolding pero en dinámico, y
más listo. A mí esos plugins me producen sensaciones encontradas
(aunque he hecho cosas muy chulas con ellos). Que decida cada cual
=;-)

Yo lo veo igual.


#12

A nadie se le ocurre por que puede dar el error? :(.

Otra cosa, he estado mirando y tengo otra duda…que hay del
scaffold_resource?? por lo visto tenia que permitir la integracion
REST…sin embargo en la version 2.0 de rails no esta…se puede
integrar de alguna forma??

SALUDOS!!


#13

2008/10/26 Jose vicente Ribera pellicer
removed_email_address@domain.invalid:

PD…No hay otra forma mas automatixada de hacerlo+ es decir, esta
relacion es bastante sencilla, pero si un proyecto va creciendo serian
demasiado cambios, no se tengo la intuicion de que algo se escapase.

Estás en lo cierto, y creo que la siguiente conclusión/paso es que el
scaffolding es muy mono para demos de “haz tu blog en 5 minutos” pero
tiene poco uso en proyectos reales. Se tarda menos en escribir tu
propio controlador REST que en hacer un scaffold y luego adaptar todas
esas cosas.

Otra opción es tirar por plugins como ResourceController (y hay alguno
más parecido) que hacen una especie de scaffolding pero en dinámico, y
más listo. A mí esos plugins me producen sensaciones encontradas
(aunque he hecho cosas muy chulas con ellos). Que decida cada cual
=;-)


Sergio Gil Pérez de la Manga
e-mail > removed_email_address@domain.invalid
blog > http://www.lacoctelera.com/porras
now > http://twitter.com/porras


#14

aqui parece que exista una solucion completa, la he estado trasteando en
el pc y funciona. Para quien este interesado en el tema.

http://www.jaimeiniesta.com/2007/12/22/tutorial-recursos-anidados-con-rest-y-rails-2/

Saludos


#15

El scaffold_resource no existe en Rails 2, era una “avanzadilla” en
Rails 1.2 para poder generar scaffolds REST.

En cuanto a los recursos REST: miráte bien el tema de las rutas, que
ya ves que es un poco dificil al principio y no anides más de dos
recursos o te volverás loco.

Te dejo algunos enlaces.
http://www.rubyrailways.com/great-ruby-on-rails-rest-resources/
http://www.eparreno.com/2008/05/25/recursos-anidados-o-no-en-rest/

El 26/10/2008, a las 22:44, Jose vicente Ribera pellicer
escribió:

Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


“Nos gustaría cambiar el mundo, pero no tenemos el código fuente”

Emili 
Parreñowww.eparreno.com
www.abecedata.com

#16

Muchas gracias a todos por la ayuda, mas o menos ya ha quedado bastante
claro. Y si…es bastante interesante, pero tedioso al mismo tiempo, por
no hablar ya de cuando en la relacion ya aparecen nietos. Al principio
me pensaba que estaba mas automatizado, lastima que no exista algo
estilo scaffold_resource para 2.0…

saludos