Commit 6607dc221143955c2b42f967c3e5d4de6948d1e9
1 parent
5bd0d07e
Exists in
stable-spb-1.5
Fixes ActiveRecord relations for descendants
Temporary fix, waiting for original fix to be merged. Original author: Jon Moss Merge Request: https://github.com/rails/rails/pull/24719 Issue: https://github.com/rails/rails/issues/20678 Signed-off-by: Joenio Costa <joenio@colivre.coop.br> Signed-off-by: Marcos Ronaldo <marcos.rpj2@gmail.com> Signed-off-by: Tallys Martins <tallysmartins@gmail.com> (cherry picked from commit 3b60e7ca12eaa9492c7cf5ba74153ca243a25417)
Showing
1 changed file
with
18 additions
and
10 deletions
Show diff stats
lib/noosfero/core_ext/active_record/reflection.rb
1 | - | ||
2 | # on STI classes tike Article and Profile, plugins' extensions | 1 | # on STI classes tike Article and Profile, plugins' extensions |
3 | # on associations should be reflected on descendants | 2 | # on associations should be reflected on descendants |
4 | module ActiveRecord | 3 | module ActiveRecord |
5 | - module Reflection | 4 | + module Associations |
5 | + def association(name) #:nodoc: | ||
6 | + association = association_instance_get(name) | ||
6 | 7 | ||
7 | - class << self | 8 | + if association.nil? |
9 | + reflection = self.class._reflect_on_association(name) | ||
8 | 10 | ||
9 | - def add_reflection_with_descendants(ar, name, reflection) | ||
10 | - self.add_reflection_without_descendants ar, name, reflection | ||
11 | - ar.descendants.each do |k| | ||
12 | - k._reflections.merge!(name.to_s => reflection) | ||
13 | - end if ar.base_class == ar | ||
14 | - end | 11 | + # Check inheritance chain for possible upstream association |
12 | + klass = self.class.superclass | ||
13 | + while reflection.nil? && klass.respond_to?(:_reflect_on_association) | ||
14 | + reflection = klass._reflect_on_association(name) | ||
15 | + klass = klass.superclass | ||
16 | + end | ||
15 | 17 | ||
16 | - alias_method_chain :add_reflection, :descendants | 18 | + unless reflection |
19 | + raise AssociationNotFoundError.new(self, name) | ||
20 | + end | ||
21 | + association = reflection.association_class.new(self, reflection) | ||
22 | + association_instance_set(name, association) | ||
23 | + end | ||
17 | 24 | ||
25 | + association | ||
18 | end | 26 | end |
19 | end | 27 | end |
20 | end | 28 | end |
-
mentioned in commit 6b693f8739d5af251ea70cd147c6b572669b189f