diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-05-02 21:42:56 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-05-15 22:00:01 +0900 |
commit | ec6dfdc8d21031e07dd381853ff37fcc63f8bd86 (patch) | |
tree | 0dbef488d2355d349279f0ae22588d92b74deeb3 /activerecord/lib/active_record | |
parent | 4511d4bf7c931fd88b9f2aa8488cf3cf762639f7 (diff) | |
download | rails-ec6dfdc8d21031e07dd381853ff37fcc63f8bd86.tar.gz rails-ec6dfdc8d21031e07dd381853ff37fcc63f8bd86.tar.bz2 rails-ec6dfdc8d21031e07dd381853ff37fcc63f8bd86.zip |
Fix eager loading associations with string joins not to raise NoMethodError
Fixes #34456.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/associations/join_dependency/join_association.rb | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/join_dependency/join_association.rb b/activerecord/lib/active_record/associations/join_dependency/join_association.rb index ca0305abbb..6a7e92dc28 100644 --- a/activerecord/lib/active_record/associations/join_dependency/join_association.rb +++ b/activerecord/lib/active_record/associations/join_dependency/join_association.rb @@ -44,8 +44,7 @@ module ActiveRecord unless others.empty? joins.concat arel.join_sources - right = joins.last.right - right.expr.children.concat(others) + append_constraints(joins.last, others) end # The current table in this iteration becomes the foreign table in the next @@ -65,6 +64,16 @@ module ActiveRecord @readonly = reflection.scope && reflection.scope_for(base_klass.unscoped).readonly_value end + + private + def append_constraints(join, constraints) + if join.is_a?(Arel::Nodes::StringJoin) + join_string = table.create_and(constraints.unshift(join.left)) + join.left = Arel.sql(base_klass.connection.visitor.compile(join_string)) + else + join.right.expr.children.concat(constraints) + end + end end end end |