让Rails识别SQL select语句中的常量需要什么技巧吗?例如,以下SQL语句是有效的:
SELECT id, name, 1 AS constant FROM table_name
我希望返回的结果有三列:id
, name
和constant
。constant
列中的值始终为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;是的,它们可能是字符串,你必须自己整理类型转换。