Hola Luis. He estado un par de dÃas liado con otro tema. Volvemos al
ataque.
Efectivamente el controlador se llama préstamos y la función se llama
actualizaCapaPrestamos(). Te pasé el código que me enviaste tú
directamente sin modificarlo.
Respecto a la lÃnea siguiente, cuando dices, que deberÃa ir en otro
fichero .rhtml, ¿en cuál?
En cuanto al filtrado que quiero establecer intentaré explicarme. Tengo
una serie de préstamos de portátiles en los cuales quiero filtrar
mediante un combo la situación de los mismos. El combo tiene tres
valores: Abierto, Cerrado y Todos, con valores 1, 2 y 3 respectivamente
En el modelo existe un campo denominado fecha_devolucion que es por el
que quiero filtrar. Cuando selecciono Abierto sólo mostraré los
registros donde ese campo esté a null (vacÃo - aún no han devuelto los
portátiles), Cuando seleccione Cerrado, mostraré los que ya han sido
entregados, por tanto fecha_devolucion distinta de null y en Todos, pues
lo dicho Todos (fecha_devolucion <> 01/01/1900 por ejemplo.
La tabla está en Mysql y los campos fechas son del tipo Date, y el campo
fecha_devolucion está definido que puede ser null.
En el fichero app/views/prestamos/component.rhtml he definido el combo
de la siguiente forma:
Incidencias -
<span style="font-size:18px;font-weight:bold;">Estado:
<select name="filtro_estado" id="filtro_estado"
onchange=“actualizaCapaPrestamos()”>
<option value ="1">
Abiertos
</option>
<option value ="2">
Cerrados
</option>
<option value = "3">
Todos
</option>
</select>
</span>
Fernando González MacÃas
fgonzalez @ grupojoly.com
Dpto. Informática Diario de Cádiz
(Grupo Joly)
De: [email protected]
[mailto:[email protected]] En nombre de Luis
Villegas
Enviado el: martes, 06 de marzo de 2007 10:14
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Filtrar con Ajax Scaffold
Buenas.
Veo que en tu script pone:
¿seguro que el controlador se llama “incidencias”?¿no deberÃa ser
“préstamos”?
Aparte, en component.rhtml no deberÃa ir ir:
<%= render_component :controller => ‘/prestamos’, :action => ‘list’,
:params => params %>
porque se está llamando a sà mismo continuamente. Tienes que poner el
código en otro rhtml.
En cuanto a tu segunda duda:
Dices:
La primera lÃnea filtro_estado = params[:filtro_estado] || “0”, sino me
equivoco debe de recoger el valor de la selección del combo y si no se
realiza le asigna un 0.
Realmente sólo le asigna 0 si es nulo params[:filtro_estado]. Si está en
blanco, el valor de filtro_estado será una cadena vacÃa.
La condición serÃa algo asÃ:
if params[:filtro_estado].blank?
filtro_estado = params[:filtro_estado]
else
filtro_estado = “0”
end
Y lo de que la fecha no sea null, no lo he entendido muy bien. PodrÃas
explicara los campos que tienes en el html y en la BD y qué es
exactamente lo que quieres que haga?
Un saludo
On 3/5/07, Fernando González MacÃas [email protected] wrote:
Hola Luis, muchas gracias por contestar.
Respecto a tú código tengo dos problemas:
-
El fichero .rhtml que estoy actualizando con tú código es el
component.rhtml. Una vez que situo el siguiente código:
<%= render_component :controller => '/prestamos', :action =>
‘list’, :params => params %>
Me entra en una especie de bucle, listándome continuamente el grid,
junto con el combo de selección, una y otra vez, hasta que me da un
error. ¿No es en este fichero donde hay que situar este código?
-
El segundo problema es con respecto, al código a introducir en
el controlador. Quiero filtrar por el estado de un campo fecha, en
función de que ese campo tenga valor o no, o bien que me muestre todos
los registros. Por lo tanto defino un combo de selección con préstamos
Abiertos, Cerrados y Todos. A los préstamos aún no devueltos se le
asigna en el campo fecha de devolución a NULL. El caso es que no tengo
nada claro como definir la condición para que el select la incorpore.
Tengo lo siguiente en el controlador:
def component
filtro_estado = params[:filtro_estado] || "0"
@show_wrapper = true if @show_wrapper.nil?
@sort_sql =
Prestamo.scaffold_columns_hash[current_sort(params)].sort_sql rescue nil
@sort_by = @sort_sql.nil? ?
“#{Prestamo.table_name}.#{Prestamo.primary_key} asc” : @sort_sql + " "
-
current_sort_direction(params)
logger.debug(“Valor de filtro_estado”+filtro_estado)
case filtro_estado
when '1' logger.debug("Valor 1") condiciones = ["fecha_devolucion = null"] when "2" logger.debug("Valor 2") condiciones = ["fecha_devolucion != null"]
else
logger.debug("Entra en ELSE") condiciones = ["fecha_devolucion != ?", '1900/01/01'] end
@paginator, @prestamos = paginate(:prestamos, :order => @sort_by,
:per_page => default_per_page, :conditions => condiciones )render :action => "component", :layout => false
end
Aquà como es evidente tengo varias dudas. La primera lÃnea filtro_estado
= params[:filtro_estado] || “0”, sino me equivoco debe de recoger el
valor de la selección del combo y si no se realiza le asigna un 0.
¿Como puedo establecer que la fecha sea null o no null? Tal como lo he
puesto no me va.
Saludos y gracias…