簡體   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