我正在尝试检查某个列在哪个表中存在。这应该由应用程序在运行时完成。我想使用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/