Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
1ed92a2e
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,发现更多精彩内容 >>
提交
1ed92a2e
编写于
5月 27, 2015
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #19886 from henders/henders/reload_wipe_query_cache
Cause ActiveRecord::Base::reload to also ignore the QueryCache.
上级
c68e45dd
95bdb95a
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
34 addition
and
1 deletion
+34
-1
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+4
-0
activerecord/lib/active_record/persistence.rb
activerecord/lib/active_record/persistence.rb
+3
-1
activerecord/test/cases/persistence_test.rb
activerecord/test/cases/persistence_test.rb
+27
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
1ed92a2e
*
Clear query cache when
`ActiveRecord::Base#relaod`
is called.
*Shane Hender*
*
Include stored procedures and function on the MySQL structure dump.
*Jonathan Worek*
...
...
activerecord/lib/active_record/persistence.rb
浏览文件 @
1ed92a2e
...
...
@@ -382,7 +382,7 @@ def toggle!(attribute)
# # => #<Account id: 1, email: 'account@example.com'>
#
# Attributes are reloaded from the database, and caches busted, in
# particular the associations cache.
# particular the associations cache
and the QueryCache
.
#
# If the record no longer exists in the database <tt>ActiveRecord::RecordNotFound</tt>
# is raised. Otherwise, in addition to the in-place modification the method
...
...
@@ -418,6 +418,8 @@ def toggle!(attribute)
# end
#
def
reload
(
options
=
nil
)
self
.
class
.
connection
.
clear_query_cache
fresh_object
=
if
options
&&
options
[
:lock
]
self
.
class
.
unscoped
{
self
.
class
.
lock
(
options
[
:lock
]).
find
(
id
)
}
...
...
activerecord/test/cases/persistence_test.rb
浏览文件 @
1ed92a2e
...
...
@@ -897,6 +897,33 @@ def test_find_via_reload
assert_not
post
.
new_record?
end
def
test_reload_via_querycache
ActiveRecord
::
Base
.
connection
.
enable_query_cache!
ActiveRecord
::
Base
.
connection
.
clear_query_cache
assert
ActiveRecord
::
Base
.
connection
.
query_cache_enabled
,
'cache should be on'
parrot
=
Parrot
.
create
(
:name
=>
'Shane'
)
# populate the cache with the SELECT result
found_parrot
=
Parrot
.
find
(
parrot
.
id
)
assert_equal
parrot
.
id
,
found_parrot
.
id
# Manually update the 'name' attribute in the DB directly
assert_equal
1
,
ActiveRecord
::
Base
.
connection
.
query_cache
.
length
ActiveRecord
::
Base
.
uncached
do
found_parrot
.
name
=
'Mary'
found_parrot
.
save
end
# Now reload, and verify that it gets the DB version, and not the querycache version
found_parrot
.
reload
assert_equal
'Mary'
,
found_parrot
.
name
found_parrot
=
Parrot
.
find
(
parrot
.
id
)
assert_equal
'Mary'
,
found_parrot
.
name
ensure
ActiveRecord
::
Base
.
connection
.
disable_query_cache!
end
class
SaveTest
<
ActiveRecord
::
TestCase
self
.
use_transactional_tests
=
false
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录