Rails2 y el generador de scaffold

El día 5/03/08, Ancor C. [email protected] escribió:

aquí si que me perdí y ya no se ni por donde buscar, en google no he
encontrado nada de interes y cada cosa que intento hacer parece que lo
agraba más.

Yo también me he perdido con tu caso… lo que creo es que con tanta
vuelta
que le has dado ya lo tienes un poco desordenado…

Mírate mi tutorial sobre recursos anidados [1] a ver si te aclara algo.

Lo que sí creo que te sobra es “/catalogo”… si sólo tienes artículos y
categorías deberías haber lanzado dos scaffolds, uno te responderá en
/articulos y otro en /categorias. Y si lo anidas, pues sería en plan…

/categorias/1/articulos

etc…

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

Hola Ancor…

El día 6/03/08, Ancor C. [email protected] escribió:

0.0.0.0:3000/categorias/1/articulos
etc…

pero ahora lo que quiero es que a todo esto se acceda de la forma

0.0.0.0:3000/catalogo/categorias/
0.0.0.0:3000/catalogo/categorias/1
0.0.0.0:3000/catalogo/categorias/1/articulos

En ese caso yo diría que lo mejor es usar namespaces, para definir que
el
acceso a las categorías ahora se hace a través de /catalogo (que no es
un
recurso en si mismo). Lo digo porque me suena parecido al tipico caso de
acceder a los recursos a través de /admin… Te pongo un ejemplo para
que
veas cómo cambian las rutas

routes.rb

map.namespace(:admin) do |admin|
admin.resources :categorias
admin.resources :articulos
end

app/views/admin/articulos/index.html.erb

<%= link_to ‘Nuevo articulo’, new_admin_articulo_path %>
<%= link_to ‘Ver’, admin_articulo_path(@articulo) %>
<%= link_to ‘Modificar’, edit_admin_articulo_path(@articulo) %>
<%= link_to ‘Eliminar’, admin_articulo_path(@articulo), :confirm =>
‘¿Seguro?’, :method => :delete %>

por cierto Jaime http://www.nurbijou.com/ me parece un proyecto bien
realizado y del que se puede aprender mucho.

Gracias, me alegro de que te guste… realmente es sencillo ese
proyecto. :slight_smile:

Gracias por la respuesta,

esa parte ya la tenia “superada” ahora estaba bloqueado en que al
introducir los datos en un formulario para por ejemplo hacer una
actualizacion o dar de alta un nuevo articulo, los datos del formulario
se pierden.

como no daba con la solución, pues cree una nueva aplicacion, con un
solo controlador, usando scaffold Catalogo::Articulo y la lista de
campos, acondicione routes.rb para usar namespaces y fui corrigiendo los
errores que aparecieron en las vistas segun fui probando, que sobretodo
eran las rutas de la forma articulo_path tenian que ser
catalogo_articulo_path hasta que ya no aparecia ningun error, pero el
problema que describí arriba también se producía en este caso, (los
valores introducidos en los formularios en la creacion y actualizacion
se perdian por el camino).

encontre un post en el que comentabas usar namespaces para admin y como
es posible que pasaras por el mismo problema, ¿sabes como solucionar
esta perdida de valores?

PD: me acabo de quedar alucinando con un mensaje q salio al itentar
postear, como tenia escrito también sin tilde, me decia esto:
Your post seems to contain Spam: “ambién”. (sin la tilde) y no me dejaba
postear.

Jaime I. wrote:

Hola,

voy a intentar explicarme un poco mejor;

tengo los modelos generados por el scaffold categoria y articulo que
estan anidados funcionan perfectamente de la forma:

0.0.0.0:3000/categorias/
0.0.0.0:3000/categorias/1
0.0.0.0:3000/categorias/1/articulos
etc…

pero ahora lo que quiero es que a todo esto se acceda de la forma

0.0.0.0:3000/catalogo/categorias/
0.0.0.0:3000/catalogo/categorias/1
0.0.0.0:3000/catalogo/categorias/1/articulos

ya que quiero diferenciar un poco las secciones de la web. Para ello he
hecho algo parecido a lo que sugerias en esta respuesta que me distes
anteriormente: [1]

por lo que el resultado debía ser algo parecido ha haber creado los
scaffolds de la forma Catalogo::Categoria y Catalogo::Articulo y luego
haberlos aninadados.

he ido realizando el cambio y he ido probando, actualmente, tengo total
acceso para ls rutas de categorias pero cuando intento acceder a los
articulos de alguna categoria me suelta este error:

Showing catalogo/articulos/index.html.erb where line #21 raised:

undefined method `catalogo_categoria_catalogo_articulo_path’ for
#ActionView::Base:0xb6e5aaf4

Extracted source (around line #21):

18: <%=h articulo.precio %>
19: <%=h articulo.categoria.nombre %>
20: <%=h articulo.nuevo %>
21: <%= link_to ‘Show’, [@categoria, articulo] %>
22: <%= link_to ‘Edit’, [:edit, @categoria, articulo] %>
23: <%= link_to ‘Destroy’, [@categoria, articulo], :confirm =>
‘Are you sure?’, :method => :delete %>
24:

del que yo sobre entiendo que de esta linea,
21: <%= link_to ‘Show’, [@categoria, articulo] %>

esto [@categoria, articulo] cambia por
catalogo_categoria_articulo_path(@categoria, articulo)

y así con los demás, y este problema solucionado, gracias al post de
Jaime I. [2].

Pero además ahora me surge otro problema, y es que por ejemplo, al
modificar una categoría me lo indica como correcto pero no se hace la
modificación, o al intentar crear una nueva me dice que el campo nombre
que es obligatorio esta vacío cuando no lo está.

esto es lo que contiene la acción edit del controlador categoria:
def edit
@categoria = Categoria.find(params[:id])
end

y esto lo que contiene la vista edit de categoria:

Editing categoria

<%= error_messages_for :categoria %>

<% form_for(@categoria) do |f| %>

Nombre
<%= f.text_field :nombre %>

<%= f.submit "Update" %>

<% end %>

<%= link_to ‘Show’, @categoria %> |
<%= link_to ‘Back’, catalogo_categorias_path %>

saben a que se puede deber esta pérdida de los valores del formulario.

por cierto Jaime http://www.nurbijou.com/ me parece un proyecto bien
realizado y del que se puede aprender mucho.

un saludo y gracias
Ancor C.

[1] http://www.ruby-forum.com/topic/143878?reply_to=642196#640216
[2]
http://www.jaimeiniesta.com/2007/12/22/tutorial-recursos-anidados-con-rest-y-rails-2/

Jaime I. wrote: