¿Hay alguna forma de tener nombres de columna de escritura ARel
(desinfectados, posiblemente con alias, etc.) en CONCAT()
y otras funciones SQL?¿Cómo uso funciones como CONCAT(), etc. en ARel?
Aquí es how to do it with AVG() ...
?> name = Arel::Attribute.new(Arel::Table.new(:countries), :name)
=> #<struct Arel::Attributes::Attribute [...]
?> population = Arel::Attribute.new(Arel::Table.new(:countries), :population)
=> #<struct Arel::Attributes::Attribute [...]
?> Country.select([name, population.average]).to_sql
=> "SELECT `countries`.`name`, AVG(`countries`.`population`) AS avg_id FROM `countries`"
(sí, ya sé que avg_id
sería la misma en cada fila, tratando de ilustrar mi pregunta)
Entonces, ¿qué si quería una función diferente ?
?> Country.select(xyz).to_sql # Arel::Concat.new(name, population) or something?
=> "SELECT CONCAT(`countries`.`name`, ' ', `countries`.`population`) AS concat_id FROM `countries`"
¡Gracias!
Sequel tiene una forma de seleccionar las columnas como ' "..." significa lit' 'SQL literal' en lugar de ser interpretado como una cadena de situaciones como esta.. Eso inhabilita el escape SQL para que pueda inyectar lo que quiera. No estoy seguro de cuál es el equivalente de AREL, pero tal vez sea una idea. – tadman
He escrito un poco más de detalle aquí yo –