如何在运行时检查数据库表列的存在和数据类型?

时间:2012-09-25 13:30:58

标签: ruby-on-rails ruby database ruby-on-rails-3

我正在使用Ruby on Rails 3.2.2,我想查看数据库表列的 presence 数据类型(例如:StringInteger,...)给定模型类的列。也就是说,我在lib目录中实现了一个Ruby模块,它带有一个传递模型类的方法(例如:Article),我想验证某些相关数据库的某些条件表格列,不再是

在我的模块方法中,我尝试使用column_exists?方法,如下所示

module MyModule
  def check_column(model_class)
    table = model_class.to_s.tableize

    unless ActiveRecord::Base.connection.column_exists?(table.to_sym, :title)
      raise ...
    end
  end
end

但没有成功:与column_exists?方法相关的(奇怪的)输出错误是这样的

Mysql2::Error: Table '<MY_APP_NAME>_development.<A_TABLE_NAME>/<ANOTHER_TABLE_NAME>/<ANOTHER_TABLE_NAME>' doesn't exist: SHOW FULL FIELDS FROM `<A_TABLE_NAME>/<ANOTHER_TABLE_NAME>/<ANOTHER_TABLE_NAME>`

在运行时正确检查数据库表列的状态数据类型应该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用ActiveRecord::Base.connection直接向DBM发送查询。

从那里你可以要求DBM描述一个特定的表,然后解析这些字段以找出有关数据类型的任何信息。