在我的代码中,我有:
class User < ActiveRecord::Base
...
scope :matching, -> (column=nil, value=nil) { where("#{column} = ?", value) }
...
end
假设有效public_id: a113f534
(不要与:id
混淆),当我这样做时:
User.matching("pubid", "a113f534").pluck(:id)
它返回:
[1]
如果我这样做:
User.matching("pubid", "a113f534").pluck(&:id)
它返回:
[[1, "emaildata@inmydb.com", "$blahsomehash", "moreRandomDBdata", nil, Wed, 27 Aug 2014 18:55:33 UTC +00:00, Wed, 27 Aug 2014 21:22:17 UTC +00:00]]
为什么使用&符号(我知道在符号上调用to_proc)返回一个带有我的id的数组以及更多的数据库列数据,而不是当我只传入符号时,它返回我想要的内容(只是id)?
我的印象是对于Ruby&gt; ~2.0.0,传入&符号是可选的,等同于传递符号。
答案 0 :(得分:7)
我的印象是对于Ruby&gt; ~2.0.0,传入&符号是可选的,等同于传递符号。
不,不是。
pluck(&:id)
是
的简写pluck { |u| u.id }
即。你正在经过一个街区。 pluck
然而忽略了块,所以上面等同于
pluck { }
或只是
pluck
返回所有列值的数组。