了解Rails选择方法

时间:2014-05-13 13:36:45

标签: sql ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我不太确定在rails上进行SQL查询时如何使用select方法。我对where子句,order子句,布尔条件等非常熟悉......但是,选择让我有点困惑这里是一个例子:

>> b = BillableWeek.select("mon_hrs + tues_hrs as two_day_total").first

究竟选择在这做什么?它的功能一般是什么?

在上面的例子中,我猜它正在选择列的mon_hrs&来自BillableWeek对象的tues_hrs,添加它们并将结果存储在two_day_total中?

虽然two_day_total也是一列吗?

2 个答案:

答案 0 :(得分:1)

ActiveReocrd类上的

select方法覆盖用于从db获取记录的sql SELECT语句。您提供的示例将执行查询:

SELECT mon_hrs + tues_hrs as two_day_total FROM billable_weeks LIMIT 1

它只返回一列(表中不存在),称为two_day_total,是存储在两个实列mon_hrstues_hrs中的vlueas的总和。

答案 1 :(得分:0)

::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"

它不会永久地向数据库添加实际列,因为从某种意义上说,如果我们不断添加和删除带有方法调用的列,那么迁移就会变得毫无意义。简而言之,您的查询将两个值一起添加并对其进行别名只是为了返回该值而不是列的快捷方式。