Có cách nào để có các tên cột ARel
viết (đã được khử trùng, có thể được đặt tên, v.v.) thành CONCAT()
và các hàm SQL khác không?Làm cách nào để sử dụng các hàm như CONCAT(), v.v ... trong AREL?
Dưới đây là 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`"
(vâng, tôi biết rằng avg_id
sẽ là như nhau trong mỗi hàng, chỉ cần cố gắng để minh họa cho câu hỏi của tôi)
Vì vậy, những gì nếu tôi muốn có một chức năng khác nhau ?
?> Country.select(xyz).to_sql # Arel::Concat.new(name, population) or something?
=> "SELECT CONCAT(`countries`.`name`, ' ', `countries`.`population`) AS concat_id FROM `countries`"
Cảm ơn!
Sequel có một cách lựa chọn cột như ' "..." lit' có nghĩa là 'SQL đen' thay vì được hiểu như là một chuỗi cho những tình huống như thế này.. Điều đó vô hiệu hóa SQL thoát để bạn có thể tiêm bất cứ điều gì bạn muốn. Không chắc tương đương AREL là gì, nhưng có lẽ đó là một ý tưởng. – tadman
Tôi đã viết chi tiết hơn một chút về điều này tại đây –