有沒有辦法讓ARel
將CONCAT()
和其他SQL函數寫入(消毒,可能是別名等)列名?如何在ARel中使用CONCAT()等函數?
這裏的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`"
(是的,我知道avg_id
將每一行中的相同,只是想說明我的問題)
所以,如果我想不同的功能?
?> Country.select(xyz).to_sql # Arel::Concat.new(name, population) or something?
=> "SELECT CONCAT(`countries`.`name`, ' ', `countries`.`population`) AS concat_id FROM `countries`"
謝謝!
續集有選擇的列'「......」 lit'意爲‘SQL文本’,而不是被解釋爲這樣的情況下字符串的方式。這將禁用SQL轉義,所以你可以注入任何你想要的。不確定AREL是什麼,但也許這是一個想法。 – tadman 2012-02-16 04:32:48
我已經在這裏自己寫了一些更詳細的信息 –
2012-03-07 22:41:13