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