Forum: Rails-ES REST anidados

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 13:03
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
4) 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:   <p>
7:     <b>Tamano</b><br />
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
45742831d67c80d12cd7b24907b8d760?d=identicon&s=25 Sergio Gil Pérez de la Manga (Guest)
on 2008-10-26 13:10
(Received via mailing list)
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
<ruby-forum-incoming@andreas-s.net>:
> 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
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>



--
Sergio Gil Pérez de la Manga
e-mail > sgilperez@gmail.com
blog > http://www.lacoctelera.com/porras
now > http://twitter.com/porras
90ea347c45cdfbc1c5767dd6304d9c10?d=identicon&s=25 Borja Martín (Guest)
on 2008-10-26 13:10
(Received via mailing list)
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
>


--
/**
 * dagi3d v4 - http://dagi3d.net
 */
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 17:33
sobre lo paths lo que he intentado y me da error :(
En el index de casa

1:<% for casa in @casas %>
2:  <tr>
3:    <td><%=h casa.direccion %></td>
4:    <td><%=h casa.pais %></td>
5:     <td><%= link_to casa.direccion, ladrillos_path(casa)%></td>
6:    .......
----------------------------
la linea:  <td><%= link_to casa.direccion, ladrillos_path(casa)%></td>
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
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 17:35
Es como si se hubiese olvidado de los paths de ladrillos no?
90ea347c45cdfbc1c5767dd6304d9c10?d=identicon&s=25 Borja Martín (Guest)
on 2008-10-26 17:48
(Received via mailing list)
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 :(
> 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
>


--
/**
 * dagi3d v4 - http://dagi3d.net
 */
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 18:22
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 :(
>> 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
>>
>
>
> --
> /**
>  * dagi3d v4 - http://dagi3d.net
>  */

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: <br />
19:
20: <%= link_to 'New ladrillo', new_ladrillo_path %>

el index de ladrillo es asi:
<h1>Listing ladrillos</h1>

<table>
  <tr>
    <th>Tamano</th>
  </tr>

<% for ladrillo in @ladrillos %>
  <tr>
    <td><%=h ladrillo.tamano %></td>
    <td><%= link_to 'Show', ladrillo %></td>
    <td><%= link_to 'Edit', edit_ladrillo_path(ladrillo) %></td>
    <td><%= link_to 'Destroy', ladrillo, :confirm => 'Are you sure?',
:method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= 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.
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 18:30
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
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 18:40
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.
45742831d67c80d12cd7b24907b8d760?d=identicon&s=25 Sergio Gil Pérez de la Manga (Guest)
on 2008-10-26 18:46
(Received via mailing list)
2008/10/26 Jose vicente Ribera pellicer
<ruby-forum-incoming@andreas-s.net>:
> 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 > sgilperez@gmail.com
blog > http://www.lacoctelera.com/porras
now > http://twitter.com/porras
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 19:02
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
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (fxn)
on 2008-10-26 20:00
(Received via mailing list)
2008/10/26 Sergio Gil Pérez de la Manga <sgilperez@gmail.com>:
>
> 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.
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 20:17
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!!
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-26 22:44
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-re...

Saludos
9b3b1fd6baa8379638d8399ecd60045d?d=identicon&s=25 Emili Parreño (emili)
on 2008-10-27 11:58
(Received via mailing list)
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-re...
http://www.eparreno.com/2008/05/25/recursos-anidad...



El 26/10/2008, a las 22:44, Jose vicente Ribera pellicer
escribió:
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> 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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2008-10-27 19:26
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
This topic is locked and can not be replied to.