Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
d8e7d6b0
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,发现更多精彩内容 >>
未验证
提交
d8e7d6b0
编写于
1月 16, 2018
作者:
R
Ryuta Kamizono
提交者:
GitHub
1月 16, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #27860 from meinac/fix_left_joins_behaviour_with_merge
Fix relation merger issue with `left_outer_joins`.
上级
562dd049
899a8014
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
37 addition
and
1 deletion
+37
-1
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+4
-0
activerecord/lib/active_record/relation/merger.rb
activerecord/lib/active_record/relation/merger.rb
+25
-1
activerecord/lib/active_record/relation/query_methods.rb
activerecord/lib/active_record/relation/query_methods.rb
+2
-0
activerecord/test/cases/relation/merging_test.rb
activerecord/test/cases/relation/merging_test.rb
+6
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
d8e7d6b0
*
Fix relation merger issue with
`left_outer_joins`
.
*Mehmet Emin İNAÇ*
*
Don't allow destroyed object mutation after
`save`
or
`save!`
is called.
*Ryuta Kamizono*
...
...
activerecord/lib/active_record/relation/merger.rb
浏览文件 @
d8e7d6b0
...
...
@@ -52,7 +52,7 @@ def initialize(relation, other)
NORMAL_VALUES
=
Relation
::
VALUE_METHODS
-
Relation
::
CLAUSE_METHODS
-
[
:includes
,
:preload
,
:joins
,
:order
,
:reverse_order
,
:lock
,
:create_with
,
:reordering
]
# :nodoc:
[
:includes
,
:preload
,
:joins
,
:
left_outer_joins
,
:
order
,
:reverse_order
,
:lock
,
:create_with
,
:reordering
]
# :nodoc:
def
normal_values
NORMAL_VALUES
...
...
@@ -79,6 +79,7 @@ def merge
merge_clauses
merge_preloads
merge_joins
merge_outer_joins
relation
end
...
...
@@ -129,6 +130,29 @@ def merge_joins
end
end
def
merge_outer_joins
return
if
other
.
left_outer_joins_values
.
blank?
if
other
.
klass
==
relation
.
klass
relation
.
left_outer_joins!
(
*
other
.
left_outer_joins_values
)
else
alias_tracker
=
nil
joins_dependency
=
other
.
left_outer_joins_values
.
map
do
|
join
|
case
join
when
Hash
,
Symbol
,
Array
alias_tracker
||=
other
.
alias_tracker
ActiveRecord
::
Associations
::
JoinDependency
.
new
(
other
.
klass
,
other
.
table
,
join
,
alias_tracker
)
else
join
end
end
relation
.
left_outer_joins!
(
*
joins_dependency
)
end
end
def
merge_multi_values
if
other
.
reordering_value
# override any order specified in the original relation
...
...
activerecord/lib/active_record/relation/query_methods.rb
浏览文件 @
d8e7d6b0
...
...
@@ -979,6 +979,8 @@ def build_left_outer_joins(manager, outer_joins, aliases)
case
join
when
Hash
,
Symbol
,
Array
:association_join
when
ActiveRecord
::
Associations
::
JoinDependency
:stashed_join
else
raise
ArgumentError
,
"only Hash, Symbol and Array are allowed"
end
...
...
activerecord/test/cases/relation/merging_test.rb
浏览文件 @
d8e7d6b0
...
...
@@ -72,6 +72,12 @@ def test_relation_merging_with_joins
assert_equal
1
,
comments
.
count
end
def
test_relation_merging_with_left_outer_joins
comments
=
Comment
.
joins
(
:post
).
where
(
body:
"Thank you for the welcome"
).
merge
(
Post
.
left_outer_joins
(
:author
).
where
(
body:
"Such a lovely day"
))
assert_equal
1
,
comments
.
count
end
def
test_relation_merging_with_association
assert_queries
(
2
)
do
# one for loading post, and another one merged query
post
=
Post
.
where
(
body:
"Such a lovely day"
).
first
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录