Estoy acostumbrado a Django, donde puede ejecutar varios métodos de filtro en querysets, es decir, Item.all.filter(foo="bar").filter(something="else")
.Filtrado de consultas de ActiveRecord en rieles
Sin embargo, esto no es tan fácil de hacer en Rails. Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }])
devuelve una matriz que significa que esto no funcionará:
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
Así que pensé que la mejor manera de filtros "apilar" es modificar las condiciones de la matriz y luego ejecutar la consulta.
Así me ocurrió con esta función:
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
Uso:
array1 = [ "foo =: foo", {: 'bar' foo =}] matriz2 = [ "algo =: algo", {: algo = 'else'}] = condiciones combinan (matriz1, array2) artículos = Item.find (: todos,: condiciones => condiciones)
Esto ha funcionado bastante bien. Sin embargo, quiero ser capaz de combinar un número arbitrario de matrices, o básicamente abreviada de la escritura:
conditions = combine(combine(array1,array2),array3)
¿Alguien puede ayudar con esto? Gracias por adelantado.
Sí, eso es exactamente lo que quiero. Vi el screencast y me pareció totalmente lógico. Pero tan pronto como encendí el código, recibí un error que decía que el alcance nombrado era un método indefinido. Entonces me di cuenta de que estaba trabajando con Rails 1.8, así que actualicé los rieles a 2.3.algo y obtuve el mismo error ... ugh, sabía que los ámbitos con nombre eran demasiado buenos para ser verdad:/ – user94154
Si congelaste Rails, entonces tu código todavía está usando una versión previa de Rails. Rails 1.8 nunca existió, por lo que debe referirse a Ruby 1.8. rails -v es un comando que le dirá qué versión de Rails existe en la línea de comando. script/about le dirá más sobre el entorno de su aplicación. –
bien el script de ruby / about no fue reconocido. ¿Qué significa congelado en términos de Rails? – user94154