Hola estoy implementando el tipico buscador con fecha de inicio y final
para una determinada clase de objetos, pero llevo toda la tarde y la
cosa esta cruda.
En la vista de buscadata lo que hago es almacenar el valor del año, mes
y dia inicial/final, esto debe funcionar, no son mas que unos campos de
texto.
Aqui esta el codigo:
<% form_tag ({:action =>‘buscadata’},{:class => ‘lgn’}) do%>
<%= stylesheet_link_tag “show” %>
Busqueda por fechas de LGN
<%='Introduzca Fecha inicial (DD/MM/AA)'%>
<%= text_field_tag :dia, params[:dia_ini]%>
<%= text_field_tag :mes, params[:mes_ini]%>
<%= text_field_tag :anyo, params[:any_ini]%>
<%='Introduzca Fecha Final (DD/MM/AA)'%>
<%= text_field_tag :dia, params[:dia_fin]%>
<%= text_field_tag :mes, params[:mes_fin]%>
<%= text_field_tag :anyo, params[:any_fin]%>
<%= submit_tag “Buscar entre las fechas seleccionadas”, :name=>nil%>
<%end%>
Sequidamente en buscadata lo que intento es que me busque en mi base de
datos estos objetos desde la fecha inicial y la final que previamente
hemos introducido. Lo que pasa es que no encuentro la forma de generar
una variable que sql entienda como fecha. Mi codigo es algo asi:
def buscadata
date1 = ??? Como crear con las variables:añoini :mesini :diaini algo
que sql lo entienda como un formato de fecha para poder realizar la
busqueda
date2 = ??? Idem
#La busqueda en SQL seria asi:
@lgn=Lgn.find(:all, :conditions => ['created_at >=? and created_at <=
? ', date1, date2 ])
He usado el buscador, pero no he encontrado mucho respecto a mi duda,
asi que agradeceria muchisimo cualquier comentario.
Gracias y saludos
end
Hola Jose, tal vez algo asi pueda ayudar:
class TuControlador < AC
def buscadata
date1 =
parse_date("#{params[:dia_ini]}/#{params[:mes_ini]/#{params[:any_ini]}")
date2 =
parse_date("#{params[:dia_fin]}/#{params[:mes_fin]/#{params[:any_fin]}")
if date1 and date2
@lgn=Lgn.find(:all, :conditions => ['created_at >=? and created_at
<=?
', date1, date2 ])
end
end
private
def parse_date(str, format=’%d/%m/%Y’)
begin
date = Date.strptime(str, format)
return date
rescue ArgumentError
return false
end
end
end
El parser de fechas llega gracias a Daniel R. Troitiño
Saludos.
Hola, gracias por las respuestas. Actualmente tengo:
def buscadata
date1
=parse_date("#{params[:dia_ini]}/#{params[:mes_ini]}/#{params[:any_ini]}")
date2
=parse_date("#{params[:dia_fin]}/#{params[:mes_fin]}/#{params[:any_fin]}")
if date1 and date2
@lgns=Lgn.find(:all, :conditions => [‘created_at >=? and
created_at <=?’, date1, date2 ])
end
end
######################################################################################################
private
def parse_date(str, format=’%d/%m/%Y’)
begin
date = Date.strptime(str, format)
return date
rescue ArgumentError
return false
end
end
Pero cuando lo llevo a la vista de buscadata (un copy paste de la del
index) me dice que @lgns esta vacio:
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Extracted source (around line #31):
28:
Email |
29:
30:
31: <% for lgn in
@lgns %>
32:
33: <%=h lgn.user_id %> |
34: <%=h lgn.client_id %> |
##################################################3
Estos son los parametros que se pueden observar durante la ejecucion en
consola:
Processing LgnsController#buscadata (for 127.0.0.1 at 2008-12-05
16:44:14) [POST]
Session ID: 228043c88804095ae481b956ad325890
Parameters:
{“authenticity_token”=>“1e73ef6797efcbfd4079674e0545a003326118bd”,
“action”=>“buscadata”, “mes”=>“12”, “dia”=>“1”, “controller”=>“lgns”,
“anyo”=>“2007”}
e[4;35;1mUser Load (0.000000)e[0m e[0mSELECT * FROM users WHERE
(users.“id” = 1) LIMIT 1e[0m
Rendering template within layouts/lgns
Rendering lgns/buscadata
Es como si solo almacenara los datos del inicio de la busqueda no?
Manuel González Noriega wrote:
2008/12/5 Jose vicente Ribera pellicer
[email protected]
Pero cuando lo llevo a la vista de buscadata (un copy paste de la del
index) me dice que @lgns esta vacio:
Pon un breakapoint en el controlador y comprueba tanto los contenidos de
params como que el parseo de la fecha devuelva lo que esperas y que el
find
te esté devolviendo datos. Ejecutar la SQL de búsqueda en la consola de
base
de datos tampoco sobrarÃa.
Programo con e-texteditor…con esto puedo poner breakpoints?..Los he
utilizado para ver errores, pero era programando en Matlab
2008/12/5 Jose vicente Ribera pellicer
[email protected]
Programo con e-texteditor…con esto puedo poner breakpoints?..Los he
utilizado para ver errores, pero era programando en Matlab
Por ejemplo,
http://wiki.rubyonrails.org/rails/pages/HowtoDebugWithRubyDebug
Asà a simple vista no parece que los nombres de los parámetros que
envÃas coincidan con los que luego consultas en el controlador.
(Perdón por la sintaxis, escrito desde el móvil)
Fernando Guillén
Desarrollador Web Freelance
El 05/12/2008, a las 16:47, Jose vicente Ribera pellicer
<[email protected]
escribió:
2008/12/5 Jose vicente Ribera pellicer
[email protected]
Pero cuando lo llevo a la vista de buscadata (un copy paste de la del
index) me dice que @lgns esta vacio:
Pon un breakapoint en el controlador y comprueba tanto los contenidos de
params como que el parseo de la fecha devuelva lo que esperas y que el
find
te esté devolviendo datos. Ejecutar la SQL de búsqueda en la consola de
base
de datos tampoco sobrarÃa.
Fernando G. wrote:
Asà a simple vista no parece que los nombres de los parámetros que
envÃas coincidan con los que luego consultas en el controlador.
(Perdón por la sintaxis, escrito desde el móvil)
Fernando Guillén
Desarrollador Web Freelance
http://fernandoguillen.info
El 05/12/2008, a las 16:47, Jose vicente Ribera pellicer
<[email protected]
escribió:
Tienes razon, justo termino de solventarlo, muchas gracias, pero el
error persiste. Eso si ahora almenos ya carga los datos correctos,tal y
como dice el error:
Parameters:
{“mes_fin”=>“12”,
“dia_fin”=>“30”,
“any_fin”=>“2008”,
“authenticity_token”=>“1e73ef6797efcbfd4079674e0545a003326118bd”,
“mes_ini”=>“1”,
“dia_ini”=>“1”,
“any_ini”=>“2008”}
Lo he solventado cambiando el nobre del text_field en vez de
dia->dia_inicio…, ahora el nombre del text fiend coincide con el del
parametro.
Por cierto buscando he encontrado informacion para pasar el vecto a
fecha con:
date =str.to_date
pero nada la cosa sigue igual
Por cierto Manuel…gracias por el enlace, me pongo ya a ello.
Cualquier ayuda sea agradecida
increible pero cierto…
Lo bueno: ya nome genera error…me dirige a la vista si!!!
Lo malo: ya le puedo meter la fecha que quiera que me muestra todos los
objetos que tengo creados
Ironico no? de tener un nil a un full…joe con el temita
SOLUCIONADO!!!
Gracias a todos por la ayuda, lo repetire hasta la saciedad, pero asi da
gusto.
Comento cual era el problema por si ayuda a alguien en el futuro.
En la consolo ejecute:
‘11/12/2008’.to_date y ante mi aombro genero un error…solucion
‘12/11/2008’.to_date…es decir (mes/dia/año).to_date y no
(dia/mes/año).to_date.
Simplemente cambie el orden de los argumentos en buscadata por:
def buscadata
date1
=parse_date("#{params[:mes_ini]}/#{params[:dia_ini]}/#{params[:any_ini]}")
date2
=parse_date("#{params[:mes_fin]}/#{params[:dia_fin]}/#{params[:any_fin]}")
if date1 and date2
@lgns=Lgn.find(:all, :conditions => [‘created_at >=? and
created_at <=?’, date1, date2 ])
end
end
y ahora todo funciona a las mil maravillas.
Un saludo y mil gracias.