Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
4e63bde6
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4e63bde6
编写于
6月 01, 2015
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20362 from kddeisz/enumerable_pluck
Allow Enumerable#pluck to take a splat.
上级
bdfc662a
777fa257
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
43 addition
and
2 deletion
+43
-2
activerecord/lib/active_record/relation/calculations.rb
activerecord/lib/active_record/relation/calculations.rb
+4
-0
activerecord/test/cases/calculations_test.rb
activerecord/test/cases/calculations_test.rb
+21
-0
activesupport/lib/active_support/core_ext/enumerable.rb
activesupport/lib/active_support/core_ext/enumerable.rb
+9
-2
activesupport/test/core_ext/enumerable_test.rb
activesupport/test/core_ext/enumerable_test.rb
+9
-0
未找到文件。
activerecord/lib/active_record/relation/calculations.rb
浏览文件 @
4e63bde6
...
...
@@ -161,6 +161,10 @@ def pluck(*column_names)
end
end
if
loaded?
&&
(
column_names
-
@klass
.
column_names
).
empty?
return
@records
.
pluck
(
*
column_names
)
end
if
has_include?
(
column_names
.
first
)
construct_relation_for_association_calculations
.
pluck
(
*
column_names
)
else
...
...
activerecord/test/cases/calculations_test.rb
浏览文件 @
4e63bde6
...
...
@@ -632,6 +632,27 @@ def test_pluck_joined_with_polymorphic_relation
assert_equal
[
part
.
id
],
ShipPart
.
joins
(
:trinkets
).
pluck
(
:id
)
end
def
test_pluck_loaded_relation
companies
=
Company
.
order
(
:id
).
limit
(
3
).
load
assert_no_queries
do
assert_equal
[
'37signals'
,
'Summit'
,
'Microsoft'
],
companies
.
pluck
(
:name
)
end
end
def
test_pluck_loaded_relation_multiple_columns
companies
=
Company
.
order
(
:id
).
limit
(
3
).
load
assert_no_queries
do
assert_equal
[[
1
,
'37signals'
],
[
2
,
'Summit'
],
[
3
,
'Microsoft'
]],
companies
.
pluck
(
:id
,
:name
)
end
end
def
test_pluck_loaded_relation_sql_fragment
companies
=
Company
.
order
(
:id
).
limit
(
3
).
load
assert_queries
1
do
assert_equal
[
'37signals'
,
'Summit'
,
'Microsoft'
],
companies
.
pluck
(
'DISTINCT name'
)
end
end
def
test_grouped_calculation_with_polymorphic_relation
part
=
ShipPart
.
create!
(
name:
"has trinket"
)
part
.
trinkets
.
create!
...
...
activesupport/lib/active_support/core_ext/enumerable.rb
浏览文件 @
4e63bde6
...
...
@@ -76,8 +76,15 @@ def without(*elements)
#
# [{ name: "David" }, { name: "Rafael" }, { name: "Aaron" }].pluck(:name)
# => ["David", "Rafael", "Aaron"]
def
pluck
(
key
)
map
{
|
element
|
element
[
key
]
}
#
# [{ id: 1, name: "David" }, { id: 2, name: "Rafael" }].pluck(:id, :name)
# => [[1, "David"], [2, "Rafael"]]
def
pluck
(
*
keys
)
if
keys
.
many?
map
{
|
element
|
keys
.
map
{
|
key
|
element
[
key
]
}
}
else
map
{
|
element
|
element
[
keys
.
first
]
}
end
end
end
...
...
activesupport/test/core_ext/enumerable_test.rb
浏览文件 @
4e63bde6
...
...
@@ -3,6 +3,8 @@
require
'active_support/core_ext/enumerable'
Payment
=
Struct
.
new
(
:price
)
ExpandedPayment
=
Struct
.
new
(
:dollars
,
:cents
)
class
SummablePayment
<
Payment
def
+
(
p
)
self
.
class
.
new
(
price
+
p
.
price
)
end
end
...
...
@@ -114,5 +116,12 @@ def test_without
def
test_pluck
payments
=
GenericEnumerable
.
new
([
Payment
.
new
(
5
),
Payment
.
new
(
15
),
Payment
.
new
(
10
)
])
assert_equal
[
5
,
15
,
10
],
payments
.
pluck
(
:price
)
payments
=
GenericEnumerable
.
new
([
ExpandedPayment
.
new
(
5
,
99
),
ExpandedPayment
.
new
(
15
,
0
),
ExpandedPayment
.
new
(
10
,
50
)
])
assert_equal
[[
5
,
99
],
[
15
,
0
],
[
10
,
50
]],
payments
.
pluck
(
:dollars
,
:cents
)
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录