我正在尝试检查某个列在哪个表中存在。这应该由应用程序在运行时完成。我想使用INFORMATION_SCHEMA.COLUMNS表和WHERE语句来做到这一点。当我执行我在pgAdmin中所做的查询时,它可以工作。现在如何在Rails中访问该表?还是有更好的方法来做我想要的?

这是我所做的查询:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'myColumn'
order by TABLE_NAME

最佳答案

如果原始查询有效,则可以使用ActiveRecord::Base.connection.execute执行它

def find_tables_for(column_name)
  return unless column_name
  ActiveRecord::Base.connection.execute(
    "SELECT table_name FROM INFORMATION_SCHEMA.COLUMNS
     WHERE COLUMN_NAME = '#{column_name}'
     ORDER BY TABLE_NAME"
  ).values.flatten
end

$~ find_tables_for('user_id')
#=> ["profiles", "posts"]


此方法将返回所有具有column_name的表


  注意:我故意选择仅table_name,您也可以添加其他字段

关于mysql - 在Rails中访问INFORMATION_SCHEMA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43805269/

10-13 06:42