插入选定的对象

Has*_*ket 1 ruby-on-rails ruby-on-rails-3

User.find([1,2,3])
Run Code Online (Sandbox Code Playgroud)

我想name只获得用户模型.我不想循环一个对象所以我试过:

User.find([1,2,3]).pluck(:name)
Run Code Online (Sandbox Code Playgroud)

但没有运气.如何使用pluck行为执行以下方案?

Dee*_*eep 7

find方法返回一个数组,但pluck不是数组方法:

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

因此,如果您想使用它,find可以这样做:

\n\n
User.find([1,2,3]).collect(&:name)\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n

你可以这样做:

\n\n
User.where(id: [1,2,3]).pluck(:name)\n
Run Code Online (Sandbox Code Playgroud)\n\n

pluck如果您需要和之间的区别,collect您可以参考以下内容:

\n\n

Rails 中的 pluck 和collect 有什么区别?

\n\n

Rails 5 更新

\n\n

在 Rails 5 中,这将起作用:

\n\n
User.find([1,2,3]).pluck(:name)\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如\xd0\x97\xd0\xb5\xd0\xbb\xd1\x91\xd0\xbd\xd1\x8b\xd0\xb9提到该pluck方法现在已添加到Enumerable对象中。

\n


aBa*_*boy 6

pluck继续努力ActiveRecord::Relation.find返回对象.

我假设,你想使用pluck它的原因是它会创建一个单独的SQL查询并name单独获取s而不是获取所有记录并循环遍历它们就像map获取name

在这种情况下,你会想要使用where喜欢

User.where(id: [1,2,3]).pluck(:name)
Run Code Online (Sandbox Code Playgroud)

where链接pluck将是您的用例的最佳方式.

文档:查找,在哪里采摘