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
行为执行以下方案?
该find
方法返回一个数组,但pluck
不是数组方法:
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
可以这样做:
User.find([1,2,3]).collect(&:name)\n
Run Code Online (Sandbox Code Playgroud)\n\n或者
\n\n你可以这样做:
\n\nUser.where(id: [1,2,3]).pluck(:name)\n
Run Code Online (Sandbox Code Playgroud)\n\npluck
如果您需要和之间的区别,collect
您可以参考以下内容:
Rails 中的 pluck 和collect 有什么区别?
\n\nRails 5 更新
\n\n在 Rails 5 中,这将起作用:
\n\nUser.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
对象中。
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
将是您的用例的最佳方式.
归档时间: |
|
查看次数: |
4599 次 |
最近记录: |