[Ror-es] Conditions de un paginate en forma de cadena

javier ramirez jramirez at aspgems.com
Wed Aug 1 11:09:31 GMT 2007


Hola,

> ['campo1 like ? and campo2 like ? and campo3 like
> ?', at campo1, at campo2, at campo3]
>
> percatado de que no podía ser tipo cadena. Así pues alguien sabe de
> alguna función o algo que me permita transformar esa cadena en lo que me
> pide el método paginate?
>   
pues.. hay dos sintáxis de la claúsula conditions que vienen muy bien 
para estos casos. Cuando tienes sólo un campo o dos como condition lo 
del ? viene muy a mano, pero cuando tienes más campos es posible tirar 
de otras soluciones.

puedes usar un conditions tal que
:conditions=>{:campo1=>variable_1, :campo2=>:variable2}

esto te hace una claúsula where con los campos y valores que le das 
separados por AND

otro caso posible es
:conditions=>['campo1 > :campo1 OR campo2 > 
:campo2',{:campo1=>valor1,:campo2=>valor2}]

eso te funciona como el ? pero vas con variables con nombre en lugar de ?

según cómo lo quieras organizar cualquiera de las dos te puede funcionar 
bien, aunque en tu caso lo mismo es más fácil la primera. Es cuestión de 
ir añadiendo dinámicamente a una estructura las variables que quieres 
incluir en la where. De hecho, si estructuras tu form bien, puede ser 
tan fácil como hacer

:conditions=>params[:mi_modelo]

si estás buscando directamente de un modelo que aparece en un form, con 
eso te vale. Te haría un AND de todos los campos que le pases con esos 
valores (eso sí, no te vale para LIKE, >, <, etc... para esos casos 
tendrías que ir por la opción b)

saludos,

j





More information about the Ror-es mailing list