Problema paso de parametros

Hola, estoy implementand en mi aplicacion una opcion que permite agregar
una serie de piezas que se han usado durante la reparacion de un
producto.

Las piezas utilizadas durante la reparacion se seleccionan a traves de
un conjunto de checkboxes. Esta es la vista en si:

Test Form

Repuestos empleados:

Pantalla LCD
Oscilador
Caracasa Trasera
Carcasa Delantera
Vibrador
Altavoz
Microfono
Fracción minima


En el controlador, si se ha seleccionado algún repuesto pasamos a la
vista del presupuesto para su posterior impresion, como se puede ver le
paso el parametro repuestos al mismo tiempo que hago el redirect a la
vista:

def add_rp_part

@kirk = Kirk.find(params[:id])
@piezas=RpPart.find(:all)

if (params[:repuesto]!=nil)
respond_to do |format|
format.html {
redirect_to(:action=>“printpresupuesto”,:id=>@kirk.id,
:repuestos=>params[:repuesto], :value=>params[:value]) }
end
end

end

Si solo se selecciona una pieza funciona perfectamente, el problema
viene cuando se han seleccionado varias piezas, si es asi solo se
muestra la primera pieza seleccioanda en la vista.

El fallo esta en el paso de parametros, pues si selecciono por ejemplo
la pantalla LCD y el oscilador la consola muestra esto:

127.0.0.1 - - [20/Feb/2009:16:32:46 CET] “GET
/kirks/add_rp_part/19?repuesto=Pantalla+LCD&repuesto=Oscilador HTTP/1.1”
302 136
http://localhost:3000/kirks/add_rp_part/19
/kirks/add_rp_part/19?repuesto=Pantalla+LCD&repuesto=Oscilador
127.0.0.1 - - [20/Feb/2009:16:32:47 CET] “GET
/kirks/printpresupuesto/19?repuestos=Pantalla+LCD HTTP/1.1” 304 0
http://localhost:3000/kirks/add_rp_part/19
/kirks/printpresupuesto/19?repuestos=Pantalla+LCD

Como se observa al controlador le llegan los dos presupuestos, pero al
hacer el redirect a printpresupuesto solo pasa el primero.

Alguna sugerencia?

Umm…me da que le fallo va a estar aqui:
http://localhost:3000/kirks/add_rp_part/19

/kirks/add_rp_part/19?repuesto=Pantalla+LCD&repuesto=Oscilador

En verdad repuesto no es un conjunto de valores, sino uno solo. La
cuestion seria crear en el controlador un vector (que no tengo ahora)
con todos los repuestos seleccionados y enviar esto a la vista de la
impresión.

Voy a mirar eso, de todas formas cualquier ayuda es agradecida.

Saludos

El Friday 20 February 2009 16:45:56 Jose vicente Ribera pellicer
escribió:

Repuestos empleados:

def add_rp_part

El fallo esta en el paso de parametros, pues si selecciono por ejemplo
/kirks/printpresupuesto/19?repuestos=Pantalla+LCD

Como se observa al controlador le llegan los dos presupuestos, pero al
hacer el redirect a printpresupuesto solo pasa el primero.

Alguna sugerencia?

Tienes todos los checkbox con el mismo nombre, por lo que solo coge el
primer
valor. Pon nombres diferentes o si quieres un array con todos los
valores
marcados, pon de nombre respuesto[]


Sergio Cambra .:: entreCables S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

Jose,

el problema lo tienes porque estas enviando una variable varias veces:
repuesto=foo&repuesto=bar.

Para pasar múltiples valores en una sola variable, (o sea, para enviar
un array de valores), el nombre del parámetro debe acabar en [], o sea:
repuesto[]=foo&repuesto[]=bar

de esta forma, en el controller recibirias params[:repuesto] =
[‘foo’,‘bar’]

en el formulario cambia el nombre del checkbox de name=“repuesto” a
name=“repuesto[]” y ten en cuenta de adaptar la lógica de tu
controlador con lo que sea necesario.

Saludos,

Isaac Feliu

Thanks!!

Jose,

la coletilla de caracteres raros es normal, es la codigificación de
los carácteres “[” y “]” escapados para que sea una url válida, por lo
que es normal.

Por lo que respecta la vista, el problema es que estás comparando un
array con un string, por lo que nunca te entrará en el if

if [“foo”, “bar”] = “foo” <<- Siempre será falso,

lo deberias hacer con:

if [“foo”, “bar”].include?(“foo”)

Saludos,

Isaac Feliu

He intentado hacer lo que me has comentado, en mi caso ya que todos se
llaman repuesto lo mas lógico era construirme un vector.

Asi que en la vista de conlos checkboxes he puesto repuesto[] es en vez
de repuestos.

De la lógica del controlador no he tocado nada, lo unico que cambia es
que ahora como dices params[:repuestos] es un vector con un todos los
repuestos seleccionados. El problema viene en la vista de imprimir
presupuestos y la cuestion es que la direccion que muestra el navegador
es correcta. Ahora muestra:

http://localhost:3000/kirks/printpresupuesto/19?elemento[]=Pantalla+LCD&elemento[]=Oscilador

Es decir, ahora si tiene los dos. Sin embargo poniendo algo como esto:

<% if params[:repuestos]==“Oscilador” %>

<td ><%=h RpPart.find(2).title %></td>
    <td ><%=h RpPart.find(2).price %></td>
    <td ><%=h RpPart.find(2).discount %></td>
      <td ><%=h RpPart.find(2).pricedisc %></td>

<% end %>

No muestra nada, mi idea es ir comparando cada uno elos repuestos que
tengo con el vector que recibo y si esta añadirlo a la tabla de
presupuestos. Pero como digo no muestra nada.

Otra cosa que me ha llamado la atencion es que desde consola me aparece
esto:

127.0.0.1 - - [20/Feb/2009:17:36:49 CET] “GET
/kirks/add_rp_part/19?repuesto%5B%5D=Pantalla+LCD&repuesto%5B%5D=Oscilador
HTTP/1.1” 302 168
http://localhost:3000/kirks/add_rp_part/19
/kirks/add_rp_part/19?repuesto%5B%5D=Pantalla+LCD&repuesto%5B%5D=Oscilador
127.0.0.1 - - [20/Feb/2009:17:36:49 CET] “GET
/kirks/printpresupuesto/19?repuestos%5B%5D=Pantalla+LCD&repuestos%5B%5D=Oscilador
HTTP/1.1” 304 0
http://localhost:3000/kirks/add_rp_part/19
/kirks/printpresupuesto/19?repuestos%5B%5D=Pantalla+LCD&repuestos%5B%5D=Oscilador

y ese sufijo con %5B%5%D que aparece en repuestos no me genera mucha
confianza. Me gustaria implementa el programa como lo tengo y
discriminar cada repuesto en la vista. Pero bueno a una mala me quedaria
la opciond e llamar a cada checkbox de una forma distinta.

Creeis que ese esa coletilla es normal??

Y yo que iva a hacer sin ti Isaac? :wink:

Muchas gracias!

Gracias, ahora ya funciona a las mil maravillas.

Hola,

Jose vicente Ribera pellicer escribió:

He intentado hacer lo que me has comentado, en mi caso ya que todos se
llaman repuesto lo mas lógico era construirme un vector.


Sobre esto no te puedo ayudar :frowning:
/kirks/add_rp_part/19?repuesto%5B%5D=Pantalla+LCD&repuesto%5B%5D=Oscilador
la opciond e llamar a cada checkbox de una forma distinta.

Creeis que ese esa coletilla es normal??

Pero no te preocupes por esto, es normal, 5b es [ en hexadecimal y 5d es
] puedes mirar [1] para mas detalles.

[1] HTML URL Encoding Reference

Un saludo a todos.