diff --git a/hobo/lib/hobo/engine.rb b/hobo/lib/hobo/engine.rb index f2a2bb948..2875677df 100644 --- a/hobo/lib/hobo/engine.rb +++ b/hobo/lib/hobo/engine.rb @@ -27,6 +27,7 @@ class Engine < Rails::Engine require 'hobo/extensions/active_record/hobo_methods' require 'hobo/extensions/active_record/permissions' require 'hobo/extensions/active_record/scopes' + require 'hobo/extensions/active_record/relation_with_origin' require 'hobo/extensions/active_model/name' require 'hobo/extensions/active_model/translation' end diff --git a/hobo/lib/hobo/extensions/active_record/relation_with_origin.rb b/hobo/lib/hobo/extensions/active_record/relation_with_origin.rb new file mode 100644 index 000000000..adfc1b8d1 --- /dev/null +++ b/hobo/lib/hobo/extensions/active_record/relation_with_origin.rb @@ -0,0 +1,28 @@ +module ActiveRecord + + class Relation + attr_accessor :origin, :origin_attribute + end + + module Associations + class AssociationCollection + + def scoped_with_origin + relation = scoped_without_origin + relation.origin = @owner + relation.origin_attribute = @reflection.name + relation + end + alias_method_chain :scoped, :origin + + def method_missing_with_origin(method, *args) + res = method_missing_without_origin(method, *args) + res.origin = @owner if res.respond_to?(:origin) + res.origin_attribute = @reflection.name if res.respond_to?(:origin_attribute) + res + end + alias_method_chain :method_missing, :origin + + end + end +end