ruby-on-rails - rails 3 : Including an SQL function in a query

标签 ruby-on-rails ruby-on-rails-3

MyModel.select('a, b, c').all
这将从数据库中返回以下内容:

+---+---+---+
| a | b | c |  
+---+---+---+
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
+---+---+---+

问题:如何在第四列中包含 SQL 函数的结果?

IE。
+---+---+---+---------------------+
| a | b | c | MYFUNCTION(a, b, c) |
+---+---+---+---------------------+
| 1 | 2 | 3 | 123                 |
| 4 | 5 | 6 | 456                 |
| 7 | 8 | 9 | 789                 |
+---+---+---+---------------------+

以下方法无效:
MyModel.select('a, b, c, MYFUNCTION(a, b, c)').all
但是,如果我使用 AS 为列指定有效模型属性的名称,它会起作用:
MyModel.select('a, b, MYFUNCTION(a, b, b) AS c').all
+---+---+-----+
| a | b |  c  |
+---+---+-----+
| 1 | 2 | 122 |
| 4 | 5 | 455 |
| 7 | 8 | 788 |
+---+---+-----+

我更愿意在模型的上下文中解决这个问题,而不是恢复到原始 SQL,因为我还需要利用范围。

任何建议非常感谢。

最佳答案

您可以为 AS 列指定任意名称,而不是指定现有属性。

irb(main):009:0> u = User.select('id, id+1 as blah').first
=> #<User id: 1>
irb(main):010:0> u.id
=> 1
irb(main):011:0> u.blah
=> 2
irb(main):012:0>

关于ruby-on-rails - rails 3 : Including an SQL function in a query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764519/

相关文章:

ruby-on-rails - 如何本地化 ActiveModel::错误消息

ruby-on-rails - 如何解决 "Can' t mass-assign protected attributes : translations_attributes"error?

java - 动态语言开/关 Java JVM

ruby-on-rails - Rails转换为货币问题

ruby-on-rails - Rails 服务器没有启动?

ruby-on-rails - 在命名空间内设计路由助手 - 与warden.authenticate 的问题!

ruby-on-rails - 一些帮助找出日志中显示的与 ruby​​ on rails favicon 相关的错误

ruby-on-rails - 模型验证以拒绝来自用户名的定义路由

ruby-on-rails - 在数据库中存储 Rails 3 路由

ruby-on-rails - Rails - 使@projects 在所有页面加载时可用