0

我正在使用 Ruby on Rails 3.2.2,我想检查给定模型类的数据库表列是否存在以及该列的数据类型(例如:String、、Integer...)。也就是说,我在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>`

我应该做什么才能在运行时正确检查数据库表列的存在数据类型?

4

1 回答 1

0

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

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

于 2012-09-25T14:36:30.120 回答