[英]Rails select from model
在一些视频中,我看到了下一个字符串:
User.select(:email).map(&:email)
告诉我这是什么意思
我知道那串
User.select(:email)
从数据库中仅选择电子邮件列,但我不明白这是什么意思
.map(&:email)
我们可以将User.select(:email)
更改为User.pluck(:email)
因为从教程中我知道多数民众赞成在相同的方法。 这是真的?
map(&:email)
将您的User
数组映射到仅包含用户电子邮件的字符串映射。
Array.map遍历当前数组,并通过调用参数块并将结果存储在新数组中来创建一个新数组。 与此等效:
new_array = []
Users.select(:email).each do |user|
new_array << user.email
end
User.select(:email)
返回一个User
对象数组。 表达方式
User.select(:email).map(&:email)
仅选择该对象的电子邮件属性。 因此,您最终得到了一系列电子邮件字符串。 最后与
User.pluck(:email)
但由于这个原因,它与User.select(:email)
不同。
很好地查看弹拨文件 。
我想你已经知道map(&:email)给了你什么,我想你是在问为什么和为什么,因为当我第一次看到它的时候,那是同一件事。 因此,这是伏都教将结果反馈给您的更高级的红宝石魔术之一:)
基本上让我们看一下map函数,其本身最基本的用法就是接受一个块级命令。 遍历之后,获取默认的返回值并将其放入数组以供使用。 例如,让我们看一下
list = User.all
因此我们获得了用户对象的列表[User model,User model]等。
list.map do |user|
user.email
end
如果您在IRB或Rails控制台中运行此块,则会得到[“ some@email.here,another@email.here”]等,因此让我们捕获此结果并将其分配给变量
email_list = list.map do |user|
user.email
end
现在email_list应该等于[“ some@email.here,another@email.here”]现在,您已经获得了map函数的背景,让我们深入研究一下它可以接受参数的各种方式
list.map {|user| user.email }
与上面的相同,但是使用花括号将块逻辑括起来
list.map(&:email)
这是上面的简写,通过为您定义块,您只需提供希望在块项目上运行的子功能即可。
希望这能使您对速记方法及其块级等效项有一定的了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.