Rails忽略SQL SELECT语句中的常量

时间:2014-06-10 00:42:12

标签: postgresql activerecord ruby-on-rails-4 rails-activerecord

是否需要使用Rails识别SQL select语句中的常量?例如,以下SQL语句有效:

SELECT id, name, 1 AS constant FROM table_name

我希望结果会返回三列:idnameconstantconstant列中的值始终为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中的错误还是已知限制,或者是否有其他方法可以执行此操作,我不会尝试?

1 个答案:

答案 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'次来电;是的,他们可能是字符串,你必须自己整理类型转换。