2016-07-22 21 views
-1
User.find([1,2,3]) 

我只想在用戶模型中獲得name。我不想在對象中循環,所以我試過了:摘取選定對象

User.find([1,2,3]).pluck(:name) 

但是沒有運氣。如何使用pluck行爲來執行以下方案?

回答

2

Pluck在這種情況下將不起作用。因此,而不是使用pluck

User.find([1,2,3]).pluck(:name) 

嘗試使用map

User.find([1,2,3]).map(&:name) 
2

rails 5它應該工作的罰款。但它不適用於任何舊版本。

但我認爲使用where更適合,

User.where(id: [1,2,3]).pluck(:name) 

因爲find提高ActiveRecord::RecordNotFound錯誤,如果沒有找到一個或多個記錄與id: [1,2,3]

3

find方法返回一個數組,pluck不是數組方法:

2.1.1 :001 > User.find([1,2,3]).pluck(:name) 
    User Load (3.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2, 3) 
NoMethodError: undefined method `pluck' for #<Array:0x0000000f22ed90> 

所以,如果你想要做的使用find你可以做這樣的:

User.find([1,2,3]).collect(&:name) 

或者

你可以這樣做:

User.where(id: [1,2,3]).pluck(:name) 

如果你需要pluckcollect之間的區別,你可以參考這個:

What is the difference between pluck and collect in Rails?

更新爲Rails 5

在導軌5這將工作:

User.find([1,2,3]).pluck(:name) 

as Зелёный men現在將pluck方法添加到Enumerable對象中。

+0

在導軌5'pluck' [被可枚舉方法](https://github.com/rails/rails/pull/20350),因此它可以被稱爲上陣列。 –

+0

謝謝@Зелёный進行更新。我已經更新了答案。 – Deep

+0

應該接受答案 –

4

pluck適用於ActiveRecord::Relationfind返回你的對象。

我認爲,要使用pluck,理由是它將使一個SQL查詢,並得到name的神妙,而不是獲取所有的這些記錄,並遍歷他們像map並獲得name

在這種情況下,你可能需要使用where

User.where(id: [1,2,3]).pluck(:name) 

wherepluck鏈將是您的使用案例的最佳方式。

文檔:findwherepluck