¿Es posible lograr algo así?
name y plural_name son campos de la tabla Animal.pluralise_animal es una función auxiliar que toma una cadena y devuelve su literal plural. Animal.update_all("plural_name = ?", pluralise_animal("I WANT THE ANIMAL NAME HERE, the `name` column's value"))Quiero algo similar a cómo puedes usar funciones en MySQL mientras modificas los valores de las columnas. ¿Está esto fuera del alcance o es posible?
UPDATE animals SET plural_name = CONCAT(name, 's') -- just an example to explain what I mean by referencing a column. I'm aware of the problems in this example.Gracias por adelantado
No puedo recorrer los registros de animales por razones técnicas.
Lo sentimos, esto no se puede hacer con esta restricción.
Si su función auxiliar de pluralización se implementa en el cliente, entonces debe recuperar los valores de los datos en el cliente, pluralizarlos y luego publicarlos nuevamente en la base de datos.
Si desea que la ACTUALIZACIÓN se ejecute en un conjunto de filas sin recuperar los valores de datos al cliente, debe implementar la lógica de pluralización en una expresión SQL, o una función almacenada o algo así.
Las sentencias UPDATE se ejecutan en el motor de la base de datos. No pueden llamar funciones en el cliente.
Use una secuencia de comandos ruby para generar una secuencia de comandos SQL que INSERTA los valores plurales en una tabla temporal
File.open(filename, 'w') do |file| file.puts "CREATE TEMPORARY TABLE pluralised_animals(id INT, plural varchar(50));" file.puts "INSERT INTO pluralised_animals(id, plural) VALUES" Animal.each.do |animal| file.puts( "( #{animal.id}, #{pluralise_animal(animal.name)})," end endNota: reemplace la coma final (,) con un punto y coma (;)
Luego ejecute el script SQL generado en la base de datos para completar la tabla temporal.
Finalmente, ejecute una declaración de actualización de SQL en la base de datos que une la tabla temporal a la tabla principal...
UPDATE animals a INNER JOIN pluralised_animals pa ON a.id = pa.id SET a.plural_name = pa.plural;