Dan*_*y Y 2 ruby activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
在我的代码中,我有:
class User < ActiveRecord::Base
...
scope :matching, -> (column=nil, value=nil) { where("#{column} = ?", value) }
...
end
Run Code Online (Sandbox Code Playgroud)
假设有效public_id: a113f534(不要与a混淆: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]]
Run Code Online (Sandbox Code Playgroud)
为什么使用&符号(我知道在符号上调用to_proc)返回一个带有我的id的数组以及更多的数据库列数据,而不是当我传入符号时,它返回我想要的内容(只是id )?
我的印象是,对于Ruby> ~2.0.0,传入&符号是可选的,等同于传递符号.
我的印象是,对于Ruby> ~2.0.0,传入&符号是可选的,等同于传递符号.
不,这不对.
pluck(&:id)
Run Code Online (Sandbox Code Playgroud)
是速记
pluck { |u| u.id }
Run Code Online (Sandbox Code Playgroud)
即你正在通过一个街区.pluck但是忽略了块,所以上面相当于
pluck { }
Run Code Online (Sandbox Code Playgroud)
要不就
pluck
Run Code Online (Sandbox Code Playgroud)
它返回所有列值的数组.
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |