在一些视频中,我看到了下一个字符串:
User.select(:email).map(&:email)
请告诉我这是什么意思
我知道那个字符串
User.select(:email)
仅从数据库中选择电子邮件列,但我不明白是什么意思
.map(&:email)
User.select(:email)
我们可以改成User.pluck(:email)
因为从教程中我明白那是相同的方法。这是真的?
在一些视频中,我看到了下一个字符串:
User.select(:email).map(&:email)
请告诉我这是什么意思
我知道那个字符串
User.select(:email)
仅从数据库中选择电子邮件列,但我不明白是什么意思
.map(&:email)
User.select(:email)
我们可以改成User.pluck(:email)
因为从教程中我明白那是相同的方法。这是真的?
将map(&:email)
您的 s 数组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)
但由于这个原因,它是不同的。
另请参阅 pluck 的文档。
我想你已经知道 map(&:email) 给了你什么,我假设你在问如何以及为什么,因为当我第一次看到这个时,这就是同样的事情。所以这是巫毒教的结果回馈给你的更高级的红宝石魔法之一:)
基本上让我们看一下map函数,它本身最基本的用法就是接受块级命令。在迭代之后,获取默认返回值并将其放入一个数组中供您使用。例如,让我们看看这个
list = User.all
所以我们得到一个用户对象列表[用户模型,用户模型]等。
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)
这是上述内容的简写,通过为您定义块,您只需提供您希望在块项目上运行的子函数。
希望这能让您对速记方法及其块级等价物有所了解。