Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
3c354bd8
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,发现更多精彩内容 >>
提交
3c354bd8
编写于
1月 18, 2014
作者:
G
Godfrey Chan
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13751 from chancancode/ar_rollback_fix
Restore ActiveRecord states after a rollback for models w/o callbacks
上级
35b85d2e
7386ffc7
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
26 addition
and
6 deletion
+26
-6
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+8
-0
activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
...active_record/connection_adapters/abstract/transaction.rb
+4
-0
activerecord/lib/active_record/core.rb
activerecord/lib/active_record/core.rb
+3
-6
activerecord/test/cases/transactions_test.rb
activerecord/test/cases/transactions_test.rb
+11
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
3c354bd8
*
ActiveRecord states are now correctly restored after a rollback for
models that did not define any transactional callbacks (i.e.
`after_commit`
,
`after_rollback`
or
`after_create`
).
Fixes #13744.
*Godfrey Chan*
*
Make
`touch`
fire the
`after_commit`
and
`after_rollback`
callbacks.
*Harry Brundage*
...
...
activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
浏览文件 @
3c354bd8
...
...
@@ -23,6 +23,10 @@ def initialize(state = nil)
@parent
=
nil
end
def
finalized?
@state
end
def
committed?
@state
==
:committed
end
...
...
activerecord/lib/active_record/core.rb
浏览文件 @
3c354bd8
...
...
@@ -397,13 +397,10 @@ def sync_with_transaction_state
end
def
update_attributes_from_transaction_state
(
transaction_state
,
depth
)
if
transaction_state
&&
!
has_transactional_callbacks?
if
transaction_state
&&
transaction_state
.
finalized?
&&
!
has_transactional_callbacks?
unless
@reflects_state
[
depth
]
if
transaction_state
.
committed?
committed!
elsif
transaction_state
.
rolledback?
rolledback!
end
restore_transaction_record_state
if
transaction_state
.
rolledback?
clear_transaction_record_state
@reflects_state
[
depth
]
=
true
end
...
...
activerecord/test/cases/transactions_test.rb
浏览文件 @
3c354bd8
...
...
@@ -430,17 +430,26 @@ def test_rollback_when_saving_a_frozen_record
end
def
test_restore_active_record_state_for_all_records_in_a_transaction
topic_without_callbacks
=
Class
.
new
(
ActiveRecord
::
Base
)
do
self
.
table_name
=
'topics'
end
topic_1
=
Topic
.
new
(
:title
=>
'test_1'
)
topic_2
=
Topic
.
new
(
:title
=>
'test_2'
)
topic_3
=
topic_without_callbacks
.
new
(
:title
=>
'test_3'
)
Topic
.
transaction
do
assert
topic_1
.
save
assert
topic_2
.
save
assert
topic_3
.
save
@first
.
save
@second
.
destroy
assert
topic_1
.
persisted?
,
'persisted'
assert_not_nil
topic_1
.
id
assert
topic_2
.
persisted?
,
'persisted'
assert_not_nil
topic_2
.
id
assert
topic_3
.
persisted?
,
'persisted'
assert_not_nil
topic_3
.
id
assert
@first
.
persisted?
,
'persisted'
assert_not_nil
@first
.
id
assert
@second
.
destroyed?
,
'destroyed'
...
...
@@ -451,6 +460,8 @@ def test_restore_active_record_state_for_all_records_in_a_transaction
assert_nil
topic_1
.
id
assert
!
topic_2
.
persisted?
,
'not persisted'
assert_nil
topic_2
.
id
assert
!
topic_3
.
persisted?
,
'not persisted'
assert_nil
topic_3
.
id
assert
@first
.
persisted?
,
'persisted'
assert_not_nil
@first
.
id
assert
!
@second
.
destroyed?
,
'not destroyed'
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录