拾取选定的对象
Pluck in a selected object
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
如果找不到一条或多条带 id: [1,2,3]
的记录,则会引发 ActiveRecord::RecordNotFound
错误。
find
方法return是一个数组,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
在 rails 5 这将起作用:
User.find([1,2,3]).pluck(:name)
因为 Зелёный 提到 pluck
方法现在已添加到 Enumerable
个对象。
pluck
适用于 ActiveRecord::Relation
。 find
returns你反对
我假设,您想使用 pluck
的原因是它会进行单个 SQL 查询并单独获取 name
s 而不是获取所有记录并循环像 map
那样超越他们以获得 name
在那种情况下,你会想使用 where
就像
User.where(id: [1,2,3]).pluck(:name)
where
与 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
如果找不到一条或多条带 id: [1,2,3]
的记录,则会引发 ActiveRecord::RecordNotFound
错误。
find
方法return是一个数组,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
在 rails 5 这将起作用:
User.find([1,2,3]).pluck(:name)
因为 Зелёный 提到 pluck
方法现在已添加到 Enumerable
个对象。
pluck
适用于 ActiveRecord::Relation
。 find
returns你反对
我假设,您想使用 pluck
的原因是它会进行单个 SQL 查询并单独获取 name
s 而不是获取所有记录并循环像 map
那样超越他们以获得 name
在那种情况下,你会想使用 where
就像
User.where(id: [1,2,3]).pluck(:name)
where
与 pluck
链接将是您用例的最佳方式。