Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
a850cf70
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,体验更适合开发者的 AI 搜索 >>
提交
a850cf70
编写于
7月 25, 2011
作者:
J
José Valim
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2251 from thedarkone/update-all-order
Bring back the ability to provide :order for update_all
上级
dffd9204
10863580
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
25 addition
and
9 deletion
+25
-9
activerecord/lib/active_record/relation.rb
activerecord/lib/active_record/relation.rb
+5
-9
activerecord/test/cases/persistence_test.rb
activerecord/test/cases/persistence_test.rb
+20
-0
未找到文件。
activerecord/lib/active_record/relation.rb
浏览文件 @
a850cf70
...
...
@@ -216,17 +216,13 @@ def update_all(updates, conditions = nil, options = {})
if
conditions
||
options
.
present?
where
(
conditions
).
apply_finder_options
(
options
.
slice
(
:limit
,
:order
)).
update_all
(
updates
)
else
limit
=
nil
order
=
[]
# Apply limit and order only if they're both present
if
@limit_value
.
present?
==
@order_values
.
present?
limit
=
arel
.
limit
order
=
arel
.
orders
stmt
=
arel
.
compile_update
(
Arel
.
sql
(
@klass
.
send
(
:sanitize_sql_for_assignment
,
updates
)))
if
limit
=
arel
.
limit
stmt
.
take
limit
end
stmt
=
arel
.
compile_update
(
Arel
.
sql
(
@klass
.
send
(
:sanitize_sql_for_assignment
,
updates
)))
stmt
.
take
limit
if
limit
stmt
.
order
(
*
order
)
stmt
.
order
(
*
arel
.
orders
)
stmt
.
key
=
table
[
primary_key
]
@klass
.
connection
.
update
stmt
.
to_sql
,
'SQL'
,
bind_values
end
...
...
activerecord/test/cases/persistence_test.rb
浏览文件 @
a850cf70
...
...
@@ -29,6 +29,26 @@ def test_update_all_ignores_order_without_limit_from_association
end
end
def
test_update_all_doesnt_ignore_order
assert_equal
authors
(
:david
).
id
+
1
,
authors
(
:mary
).
id
# make sure there is going to be a duplicate PK error
test_update_with_order_succeeds
=
lambda
do
|
order
|
begin
Author
.
order
(
order
).
update_all
(
'id = id + 1'
)
rescue
ActiveRecord
::
ActiveRecordError
false
end
end
if
test_update_with_order_succeeds
.
call
(
'id DESC'
)
assert
!
test_update_with_order_succeeds
.
call
(
'id ASC'
)
# test that this wasn't a fluke and using an incorrect order results in an exception
else
# test that we're failing because the current Arel's engine doesn't support UPDATE ORDER BY queries is using subselects instead
assert_sql
(
/\AUPDATE .+ \(SELECT .* ORDER BY id DESC\)\Z/i
)
do
test_update_with_order_succeeds
.
call
(
'id DESC'
)
end
end
end
def
test_update_all_with_order_and_limit_updates_subset_only
author
=
authors
(
:david
)
assert_nothing_raised
do
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录