我对Rails相当新,但有相当广泛的编程背景。我正在开展一个项目,我的合作伙伴告诉我要调用这个功能:
UserStats.select("DISTINCT(car_id) as car_id").where(["age |~ >?", 25]).map(&:car_id)
他告诉我这个声明将为我提供超过25岁的所有用户的阵列用户车识别码。
现在我并不确定我完全理解这一行中发生了什么。我知道UserStats是一个类,但我没有看到select方法。
这是一个已定义的方法吗?我可以在ruby函数中调用此行,还是需要先初始化类?
car_id
是否需要实际上是`:car_id"?任何帮助将不胜感激。
答案 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进行基本数据库操作变得非常容易。