Rails忽略SQL SELECT语句中的常量



让Rails识别SQL select语句中的常量需要什么技巧吗?例如,以下SQL语句是有效的:

SELECT id, name, 1 AS constant FROM table_name

我希望返回的结果有三列:id, nameconstantconstant列中的值始终为1。

然而,在Rails中,如果我尝试做同样的事情,常数列被删除使用Model.find_by_sql:

TableName.find_by_sql("SELECT id, name, 1 AS constant FROM table_name")

ActiveRecord::Base.connection.execute("SELECT id, name, 1 AS constant FROM table_name")

这是一个错误或在Rails 4.0已知的限制,或者如果有另一种方法来做到这一点,我没有尝试?

是什么让你认为你的constant不在那里?从精细手册:

find_by_sql(sql, bindings = [])
[…]
如果调用一个跨越多个表的复杂SQL查询,SELECT指定的列将是模型的属性,无论它们是否是相应表的列。

我特别强调。所以如果你这样写:

a = TableName.find_by_sql("SELECT id, name, 1 AS constant FROM table_name")

那么你可以说a.first.constant,然后得到一些东西。请注意,您可能在控制台中看到的通常inspect输出将不包括constant,因为AR的inspect只知道表列;您将在控制台中看到如下内容:

[#<TableName id: 6, name: "Pancakes">, ...]

,但对象将响应constant调用'1' s;是的,它们可能是字符串,你必须自己整理类型转换。

最新更新