【问题标题】:Ruby on Rails Select As doesn't workRuby on Rails Select As 不起作用
【发布时间】:2015-06-14 14:52:20
【问题描述】:

我正在尝试使“Select As”查询语句正常工作,但不断收到错误消息,并且不确定它为什么不工作。根据 API 文档,格式是正确的。

User.select("firstname as fname")

结果:

  User Load (1.7ms)  SELECT firstname as fname FROM "users"
 => #<ActiveRecord::Relation [#<User id: nil>, #<User id: nil>]

但是,如果我使用:

User.select(:firstname)

我明白了:

  User Load (2.8ms)  SELECT "users"."firstname" FROM "users"
 => #<ActiveRecord::Relation [#<User id: nil, firstname: "John">, #<User id: nil, firstname: "Brian">,

所以我可以从查询中看到为什么它没有返回结果,但我不明白为什么它会创建不正确的查询。 (我需要使用 select as on 的实际查询比这个查询更复杂,但我试图使用更简单的查询来试图找出它为什么不能正常工作。

我需要使用 select 作为查询的原因是因为我有来自两个非常不同的表的两个单独的对象,我需要将它们连接在一起并更改其中一个列名,以便我可以按该列排序。我不确定在组合对象之前是否有更简单的方法来更改名称。

谢谢!

【问题讨论】:

  • 是否要将firstname 字段更改为fname
  • 是的,这个查询只有 temp,带有 sql select as 语句。不是永久的。

标签: ruby-on-rails select subquery


【解决方案1】:

您可以在模型中使用alias_attribute :firstname, :fname,然后也可以在控制器中使用User.select(:fname)

【讨论】:

  • 谢谢乌代。这也应该在控制台中工作吗?我正在尝试通过在控制台中使用它来测试它,但得到“没有这样的列”错误。
  • 在你的应用中直接使用alias_attribute
  • 所以语法切换了,应该是alias_attribute :fname, :firstname。我让它在控制台中工作,但我仍然有同样的问题,当记录返回时,键仍然是原始列名,而不是别名: 2.1.1 :001 > User.select(:fname) .where(id:1) 用户负载 (0.5ms) SELECT "users"."firstname" FROM "users" WHERE "users"."id" = ? [["id", 1]] => #<:relation id: nil firstname:>]>
  • 我不确定这是否清楚,但返回的记录集使用名字键,即使选择语句使用别名。我需要它在返回记录集时使用别名,我通常会使用 SQL Select firstname as fname 语句执行此操作,但由于某种原因也无法正常工作
  • 是的,我希望避免对 SQL 语句进行硬编码。看来我可能没有其他选择了。仍然不确定为什么 SQL Select as 语句不起作用。似乎也找不到任何文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2014-09-12
相关资源
最近更新 更多