2

在 Rails 中,我们可以这样做:

TableName.column_names

并获取所有表的列名作为字符串的数组。

有没有什么办法可以以某种流线型的、类似 ruby​​ 的方式,获取一个表的所有 column_names 是数字的?还是所有的花车?还是字符串等?

现在,我只是定位我正在使用的表的所有非数字列名,并将它们作为数组从所有表的列名列表中减去,如下所示:

cols = TableName.column_names - ["name", "created_at", "location", ... ]

有超过一百个数字列,所以这是我现在最好的解决方案,但感觉就像一个 hack

4

1 回答 1

5

这可以解决问题:

ModelClass.columns.select{ |c| c.type == :integer }.map(&:name)

返回的列对象#columns包含架构中存在的大部分信息,包括它们是什么类型,它们是否可以为空或具有默认值等。

请注意,此列表将包括,例如,列和用于引用关联的id任何列。您可以通过检查xyz_id来过滤掉,但从架构的角度来看,这些列并不是“特殊”的,因此您可能必须手动将它们列入黑名单。(如果不小心在列表中包含不需要的列会导致坏事发生,一种更安全的方法可能是忘记模式自省并简单地维护所需列的白名单。)id#primaryxyz_id

于 2013-07-31T21:05:49.020 回答