【问题标题】:Understanding Rails Select Methods了解 Rails 选择方法
【发布时间】:2014-05-13 13:36:44
【问题描述】:
我不太清楚在 Rails 上进行 SQL 查询时如何使用 select 方法。我对 where 子句、订单子句、布尔条件等非常熟悉......但是,选择让我有点困惑,这里有一个例子:
>> b = BillableWeek.select("mon_hrs + tues_hrs as two_day_total").first
select 到底在做什么?它一般有什么作用?
在上述情况下,我猜它是从 BillableWeek 对象中选择列的 mon_hrs 和 tues_hrs,添加它们并将结果存储在 two_day_total 中?
two_day_total 也是一列吗?
【问题讨论】:
标签:
sql
ruby-on-rails
ruby
ruby-on-rails-3
ruby-on-rails-4
【解决方案1】:
select ActiveReocrd 类上的方法覆盖用于从数据库中获取记录的 sql SELECT 语句。您给出的示例将执行查询:
SELECT mon_hrs + tues_hrs as two_day_total FROM billable_weeks LIMIT 1
它将只返回一列(表中并不真正存在),称为 two_day_total 是存储在两个实际列 mon_hrs 和 tues_hrs 中的 vlueas 的总和。
【解决方案2】:
::select 可以做很多不同的查询。但我相信您正在做的是创建一个可由 ActiveRecord 调用的别名方法。这是来自documentation 的示例。
#If an alias was specified, it will be accessible from the resulting objects:
Model.select('field AS field_one').first.field_one
# => "value"
它不会永久地向您的数据库添加一个实际的列,因为从某种意义上说,如果我们通过方法调用不断地添加和删除列,那么迁移就会变得毫无意义。简而言之,您的查询将两个值加在一起并为其设置别名只是为返回该值而不是列创建了一个快捷方式。