Forum: Rails-ES Carritos sin vincular a la sesion

Posted by Alberto Lopez (alb3rtop)
on 2010-01-25 19:11
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 :) 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
Posted by Alberto Lopez (alb3rtop)
on 2010-01-29 00:09
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

<h1>New producto</h1>

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

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

<% 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?
Posted by Juan Ripoll (juarinu)
on 2010-02-01 11:38
Alberto Lopez 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
> 
> <h1>New producto</h1>
> 
> <% form_for([@who, @producto]) do |f| %>
>   <%= f.error_messages %>
> 
>   <p>
>    <%= f.label :nombre %><br />
>     <%= f.collection_select :nombre, Producto.all(:order => "nombre"), 
> :nombre, :nombre, :include_blank => true %>
>   </p>
> 
> <% 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...
Posted by Alberto Lopez (alb3rtop)
on 2010-02-01 17:23
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?
Posted by Juan Ripoll (juarinu)
on 2010-02-08 11:13
Alberto Lopez 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](http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html) 
en el API de rails.

Un Saludo...
Posted by Alberto Lopez (alb3rtop)
on 2010-02-08 16:57
Genial, si supiera lo del observe_field antes.. gracias! :D
Posted by Alberto Lopez (alb3rtop)
on 2010-02-12 00:09
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 <div> "table", mientras busca sale un dibujo muy chulo y 
uso como url este mismo archivo.

<div id="table">
  <%= render :partial => "item_list" %>
</div>

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:

<table>

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

 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).
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.