我正在为rails构建一个通用报告工具,我不仅要获取原始SQL查询的列名,还要获取转换后的ruby类型。我将使用该类型使界面更好一点。
以下作品,但肯定还有更多的东西可以接近这个吗?查询只是一个示例,它可能使用用户想要的任何动态SQL来跨越每个表。
sql = "SELECT * FROM SOME_TABLE"
results = ActiveRecord::Base.connection.raw_connection.exec(sql)
results.nfields.times do |i|
puts results.fname(i)
name = results.fname(i)
typename = DataSet.connection.raw_connection.
exec( "SELECT format_type($1,$2)", [results.ftype(i), results.fmod(1)] ).
getvalue( 0, 0 )
column = ActiveRecord::ConnectionAdapters::Column.new(name, nil, typename)
puts column.klass # gives a decent assumption of type
end
答案 0 :(得分:0)
ModelX.columns.each do |column|
puts column.sql_type # int(11)
puts column.type # :integer
end
这假设您为每个表都有一个ActiveRecord模型。