Rails-获取某种数据类型的所有表列的名称吗?(#column_names仅用于float cols,例如。)

bou*_*uby 2 activerecord ruby-on-rails columnname

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

TableName.column_names
Run Code Online (Sandbox Code Playgroud)

并以字符串的形式获取表的所有列名称的数组。

我能以某种简化的,类似ruby的方式获取数字表的所有column_name的方法吗?还是所有的花车?或琴弦等?

现在,我只是在查找要使用的表的所有非数字列名,然后从所有表的列名列表中将它们作为数组减去,如下所示:

cols = TableName.column_names - ["name", "created_at", "location", ... ]
Run Code Online (Sandbox Code Playgroud)

有一百多个数值列,所以这是我目前最好的解决方案,但感觉像是被黑客入侵了

Dig*_*ora 5

这将达到目的:

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

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

请注意,该列表将包括,例如,id列和xyz_id用于引用关联的任何列。您可以id通过选中进行过滤#primary,但是xyz_id从架构的角度来看,这些列并不是“特殊”的,因此您可能必须手动将其列入黑名单。(如果不小心在列表中包含不需要的列会导致发生不好的事情,那么一种更安全的方法可能是忽略模式自省,而只需维护所需列的白名单即可。)