Carritos sin vincular a la sesion

Hola de nuevo. Estoy tratando de hacer una historia con el carrito.

Tengo actualmente un carrito que se inicializa con la sesión. Tam-bien
tengo un controlador basado en menu de arboles, el cual le llamé “who”.
El controlador who tiene productos, que son los que se añaden al
carrito.

Es como si who fueran posts y productos los comentarios, para que me
sigais mas facilmente :slight_smile: Los productos los voy añadiendo al carrito y
todo funciona perfecto pero… como sería para que haya un carrito por
who (post) creado?

Esto es, imaginaos que creas un who (post) sobre cocina y tienes
productos que vas añadiendo al carrito… Luego haces otro who (post)
sobre oficina y tienes productos de oficina que vas añadiendo a otro
carrito diferente…

Actualmente inicializo el carrito a la sesion:

#productos_controller.rb

def encontrar_carrito
@carrito = (session[:carrito] ||= Carrito.new)
end

Y la verdad es que no sé que pasos debería seguir para hacerlo. De
momento he intentado hacerlo sin tener que crear un controlador ni nada
de eso del carrito.

Tengo un modelo carrito.rb con métodos como añadir_producto y todo eso
que tiene que hacer el carrito. Y nada mas.

Gracias

Vale, pues olvidaros de todo lo anterior, lo voy a hacer de otra manera,
pero solo una pregunta:

Como puedo hacer, para que yo al crear un producto nuevo, siendo mi
formulario:

#views/productos/new

New producto

<% form_for([@who, @producto]) do |f| %>
<%= f.error_messages %>

<%= f.label :nombre %>
<%= f.collection_select :nombre, Producto.all(:order => "nombre"), :nombre, :nombre, :include_blank => true %>

<% end %>

<%= link_to ‘Back’, productos_path %>

Si yo tengo en productos por ejemplo “cafe, napolitanas, bollos…” al
crear un producto nuevo me dará a elegir qué producto quiero de todos
esos. Si le doy a uno de ellos, por ejemplo a café, y le doy a crear,
obviamente solo se rellena el campo nombre, pero faltaría el campo
descripcion y precio. Como podría hacer para que esos parámetros se
“autorrellenaran” seleccionando solamente el nombre del producto?

Entonces con un observe_field, si una persona elige en el campo Nombre:
(por ejemplo) bollo, el campo precio se rellenará “automaticamente” con
el precio del bollo?

Alberto L. wrote:

Vale, pues olvidaros de todo lo anterior, lo voy a hacer de otra manera,
pero solo una pregunta:

Como puedo hacer, para que yo al crear un producto nuevo, siendo mi
formulario:

#views/productos/new

New producto

<% form_for([@who, @producto]) do |f| %>
<%= f.error_messages %>

<%= f.label :nombre %>
<%= f.collection_select :nombre, Producto.all(:order => "nombre"), :nombre, :nombre, :include_blank => true %>

<% end %>

<%= link_to ‘Back’, productos_path %>

Si yo tengo en productos por ejemplo “cafe, napolitanas, bollos…” al
crear un producto nuevo me dará a elegir qué producto quiero de todos
esos. Si le doy a uno de ellos, por ejemplo a café, y le doy a crear,
obviamente solo se rellena el campo nombre, pero faltaría el campo
descripcion y precio. Como podría hacer para que esos parámetros se
“autorrellenaran” seleccionando solamente el nombre del producto?

Es solo una sugerencia…

Podrías crear un bloque DIV y mediante AJAX (con un “observe_field”)
rellenarlo con la información que quieras presentar cuando el
“collection_select” cambiase.

Un Saludo…

Alberto L. wrote:

Entonces con un observe_field, si una persona elige en el campo Nombre:
(por ejemplo) bollo, el campo precio se rellenará “automaticamente” con
el precio del bollo?

Con observe_field puedes controlar si un campo del formulario cambia y
si esto ocurre, modificar mediante javascript el valor de otros campos
del formulario. Otra opción es controlar el cambio del campo y “traer”
del servidor todo un bloque de código (un DIV con toda la información
restante) e insertarlo en tu página.

De todas maneras consulta el tema del
observe_field
en el API de rails.

Un Saludo…

Genial, si supiera lo del observe_field antes… gracias! :smiley:

Bueno, he estado mirando acerca del observe_field y tal…

y tengo un problema(espero que pequeño.

Yo tengo un cuadro de texto donde el usuario deberia buscar el nombre de
un “item” y le debería salir el item con ese nombre, vale?

Si yo creo un item con nombre, por ejemplo, bollo y precio 1€, en ese
cuadro de texto voy a probar a ver si funciona y tecleo: bollo. Y lo que
sucede es que me hace un amago de funcionar, pero con los campos Nombre
y Precio vacios. Esto es lo que hice:

en productos/index.rhtml tengo:

<%= text_field_tag(“query”, params[‘query’], :size => 10 ) %>
#Hasta aqui creo que bien, solo es para poner el texto y lo guardo como
parametro

<%= observe_field ‘query’, :frequency => 2,
:update => ‘table’,
:before => “Element.show(‘roller’)”,
:success => “Element.hide(‘roller’)”,
:url => {:action => ‘index’},
:with => ‘query’ %>

Actualizo el
“table”, mientras busca sale un dibujo muy chulo y

uso como url este mismo archivo.

<%= render :partial => "item_list" %>

Ahora en el controller tengo:

def index
@productos = Producto.all
if request.xml_http_request?
render :partial => “item_list”, :layout => false
end
end

y en item_list.rhtml:

<% @productos.each do |producto| %>
<tr class="<%= cycle("even","odd") %>">
  <td><%= producto.nombre %></td>
  <td><%= producto.precio %></td>
</tr>
<% end %>

Bueno, sabéis que puede faltar o que tengo mal para que no muestre lo
mismo que tecleo en el campo text_field? De lo que trato de hacer es
como un filtrado. Tengo una lista de items y al poner bollo, solamente
muestra el nombre bollo y sus atributos(cosa que muestra todos los
atributos en blanco).