是否需要使用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中的错误还是已知限制,或者是否有其他方法可以执行此操作,我不会尝试?
答案 0 :(得分:1)
是什么让您认为constant
不存在?来自fine manual:
find_by_sql(sql,binds = [])
[...]
如果调用跨越多个表的复杂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
s回复'1'
次来电;是的,他们可能是字符串,你必须自己整理类型转换。