User.find([1,2,3])
我只想在用戶模型中獲得name
。我不想在對象中循環,所以我試過了:摘取選定對象
User.find([1,2,3]).pluck(:name)
但是沒有運氣。如何使用pluck
行爲來執行以下方案?
User.find([1,2,3])
我只想在用戶模型中獲得name
。我不想在對象中循環,所以我試過了:摘取選定對象
User.find([1,2,3]).pluck(:name)
但是沒有運氣。如何使用pluck
行爲來執行以下方案?
Pluck
在這種情況下將不起作用。因此,而不是使用pluck
:
User.find([1,2,3]).pluck(:name)
嘗試使用map
:
User.find([1,2,3]).map(&:name)
在rails 5
它應該工作的罰款。但它不適用於任何舊版本。
但我認爲使用where
更適合,
User.where(id: [1,2,3]).pluck(:name)
因爲find
提高ActiveRecord::RecordNotFound
錯誤,如果沒有找到一個或多個記錄與id: [1,2,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)
如果你需要pluck
和collect
之間的區別,你可以參考這個:
What is the difference between pluck and collect in Rails?
更新爲Rails 5
在導軌5這將工作:
User.find([1,2,3]).pluck(:name)
as Зелёный men現在將pluck
方法添加到Enumerable
對象中。
在導軌5'pluck' [被可枚舉方法](https://github.com/rails/rails/pull/20350),因此它可以被稱爲上陣列。 –
謝謝@Зелёный進行更新。我已經更新了答案。 – Deep
應該接受答案 –