理解Ruby on Rails函数调用类

时间:2014-06-06 07:05:09

标签: ruby-on-rails ruby

我对Rails相当新,但有相当广泛的编程背景。我正在开展一个项目,我的合作伙伴告诉我要调用这个功能:

UserStats.select("DISTINCT(car_id) as car_id").where(["age |~ >?", 25]).map(&:car_id)

他告诉我这个声明将为我提供超过25岁的所有用户的阵列用户车识别码。

现在我并不确定我完全理解这一行中发生了什么。我知道UserStats是一个类,但我没有看到select方法。

  1. 这是一个已定义的方法吗?我可以在ruby函数中调用此行,还是需要先初始化类?

  2. car_id是否需要实际上是`:car_id"?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

UserStats是一个模型。它表示数据库中的表。

UserStats.select是一种从模型中提取结果的查询方法(最终是数据库表)。 请在此处阅读:http://guides.rubyonrails.org/active_record_querying.html

where是select的一个子句,它等同于mysql where子句。

返回的结果是一个数组,map创建一个新数组,其中包含您使用car_ids

的情况下块返回的值

首先在rails console中运行此代码,您可以看到为其生成的等效数据库查询。这可能会帮助您更好地理解。类似的东西:

SELECT DISTINCT(car_id) as car_id FROM `User_Stats` WHERE (age >= 25)

这应该返回类似:

[#<UserStat car_id: "Z5w3iefxJh">, #<UserStat car_id: "SADH1243Ng">, ...]

.map(&:car_id)现在将对结果数组进行清理:

 ["Z5w3iefxJh", "SADH1243Ng", ...]

答案 1 :(得分:1)

如果UserStats类继承自ActiveRecord,则内置select .Ruby使通过ActiveRecord进行基本数据库操作变得非常容易。

http://guides.rubyonrails.org/active_record_querying.html