Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module ActiveRecord
- module Associations
- class HasManyThroughAssociation < AssociationProxy
- def construct_owner_attributes_with_bugfix(reflection)
- if reflection.macro == :belongs_to
- { reflection.klass.primary_key => \
- @owner[reflection.primary_key_name] }
- else
- construct_quoted_owner_attributes_without_bugfix(reflection)
- end
- end
- alias_method_chain :construct_owner_attributes, :bugfix
- def construct_quoted_owner_attributes_with_bugfix(reflection)
- if reflection.macro == :belongs_to
- { reflection.klass.primary_key => \
- @owner.send(:attributes_with_quotes)[reflection.primary_key_name] }
- else
- construct_quoted_owner_attributes_without_bugfix(reflection)
- end
- end
- alias_method_chain :construct_quoted_owner_attributes, :bugfix
- end
- module ClassMethods
- class JoinDependency
- class JoinAssociation < JoinBase
- def association_join_with_bugfix
- res = association_join_without_bugfix
- return res unless reflection.macro == :has_many and \
- reflection.options[:through] and \
- reflection.through_reflection.macro == :belongs_to
- connection = reflection.active_record.connection
- if through_reflection.options[:as]
- jt_foreign_key = through_reflection.options[:as].to_s + '_id'
- else
- jt_foreign_key = through_reflection.primary_key_name
- end
- erroneous_string = " ON (%s.%s = %s.%s" % [
- connection.quote_table_name(parent.aliased_table_name),
- connection.quote_column_name(parent.primary_key),
- connection.quote_table_name(aliased_join_table_name),
- connection.quote_column_name(jt_foreign_key)
- ]
- if (index = res.index(erroneous_string))
- correct_string = " ON (%s.%s = %s.%s" % [
- connection.quote_table_name(parent.aliased_table_name),
- connection.quote_column_name(jt_foreign_key),
- connection.quote_table_name(aliased_join_table_name),
- connection.quote_column_name(
- through_reflection.klass.primary_key
- )
- ]
- res[index, erroneous_string.length] = correct_string
- end
- res
- end
- alias_method_chain :association_join, :bugfix
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment