从原始SQL语句获取列类型以进行报告

时间:2014-06-23 19:56:45

标签: ruby-on-rails activerecord reporting

我正在为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

1 个答案:

答案 0 :(得分:0)

ModelX.columns.each do |column| puts column.sql_type # int(11) puts column.type # :integer end

这假设您为每个表都有一个ActiveRecord模型。