Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
cdbd64d1
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,发现更多精彩内容 >>
提交
cdbd64d1
编写于
2月 14, 2013
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #9252 from senny/8423_hmt_preloading_bug
don't cache invalid subsets when preloading hmt associations
上级
a254e4b4
4a4ff504
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
1 deletion
+30
-1
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+22
-0
activerecord/lib/active_record/associations/preloader/through_association.rb
...tive_record/associations/preloader/through_association.rb
+2
-1
activerecord/test/cases/associations/eager_test.rb
activerecord/test/cases/associations/eager_test.rb
+6
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
cdbd64d1
## Rails 4.0.0 (unreleased) ##
*
Preloading
`has_many :through`
associations with conditions won't
cache the
`:through`
association. This will prevent invalid
subsets to be cached.
Fixes #8423.
Example:
class User
has_many :posts
has_many :recent_comments, -> { where('created_at > ?', 1.week.ago) }, :through => :posts
end
a_user = User.includes(:recent_comments).first
# this is preloaded
a_user.recent_comments
# fetching the recent_comments through the posts association won't preload it.
a_user.posts
*Yves Senn*
*
Don't run after_commit callback when creating through an association
if saving the record fails.
...
...
activerecord/lib/active_record/associations/preloader/through_association.rb
浏览文件 @
cdbd64d1
...
...
@@ -31,7 +31,8 @@ def through_records_by_owner
through_records
=
Array
.
wrap
(
owner
.
send
(
through_reflection
.
name
))
# Dont cache the association - we would only be caching a subset
if
reflection
.
options
[
:source_type
]
&&
through_reflection
.
collection?
if
(
through_scope
!=
through_reflection
.
klass
.
unscoped
)
||
(
reflection
.
options
[
:source_type
]
&&
through_reflection
.
collection?
)
owner
.
association
(
through_reflection
.
name
).
reset
end
...
...
activerecord/test/cases/associations/eager_test.rb
浏览文件 @
cdbd64d1
...
...
@@ -1162,4 +1162,10 @@ def test_deep_including_through_habtm
Post
.
where
(
'1 = 0'
).
scoping
{
Comment
.
preload
(
:post
).
find
(
1
).
post
}
)
end
test
"preloading does not cache has many association subset when preloaded with a through association"
do
author
=
Author
.
includes
(
:comments_with_order_and_conditions
,
:posts
).
first
assert_no_queries
{
assert_equal
2
,
author
.
comments_with_order_and_conditions
.
size
}
assert_no_queries
{
assert_equal
5
,
author
.
posts
.
size
,
"should not cache a subset of the association"
}
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录