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 e0715d9dd1902ce02a5aeb4f347ed5c51582feb1..d1bc64adf67d36c7dc0521f647a79b4e742c6e76 100644 --- a/activerecord/lib/active_record/associations/join_dependency/join_association.rb +++ b/activerecord/lib/active_record/associations/join_dependency/join_association.rb @@ -97,22 +97,24 @@ def join_to(manager) constraint = build_constraint(reflection, table, key, foreign_table, foreign_key) - scope_chain_items = scope_chain[i] + scope_chain_items = scope_chain[i].map do |item| + if item.is_a?(Relation) + item + else + ActiveRecord::Relation.new(reflection.klass, table).instance_exec(self, &item) + end + end if reflection.type - scope_chain_items += [ + scope_chain_items.concat [ ActiveRecord::Relation.new(reflection.klass, table) .where(reflection.type => foreign_klass.base_class.name) ] end - scope_chain_items += [reflection.klass.send(:build_default_scope)].compact + scope_chain_items.concat [reflection.klass.send(:build_default_scope)].compact constraint = scope_chain_items.inject(constraint) do |chain, item| - unless item.is_a?(Relation) - item = ActiveRecord::Relation.new(reflection.klass, table).instance_exec(self, &item) - end - if item.arel.constraints.empty? chain else