繁体   English   中英

滑轨从模型中选择

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM