class AssociationScope::Scope::BelongsToReflection
Public Instance Methods
apply()
click to toggle source
# File lib/association_scope/scope/belongs_to_reflection.rb, line 6 def apply association = @association details = model.reflections[association] class_name = details.options[:class_name]&.constantize || association.camelize.constantize association_name = association.to_s.underscore.to_sym foreign_key = details.options[:foreign_key] own_table_name = class_name.to_s.pluralize.underscore inverse_reflection = class_name.reflections[model.to_s.underscore.singularize] || class_name.reflections[model.to_s.underscore.pluralize] case inverse_reflection&.source_reflection&.class&.to_s&.split("::")&.last when "HasOneReflection" table_name = model.to_s.underscore.to_sym when "HasManyReflection" table_name = model.to_s.underscore.pluralize.to_sym else raise AssociationMissingError.new missing_in: class_name, association: model.to_s.underscore.pluralize end model.class_eval <<-RUBY, __FILE__, __LINE__ + 1 scope association.pluralize, -> do if foreign_key.present? class_name .joins("JOIN #{table_name} ON #{table_name}.#{foreign_key} = #{own_table_name}.id") else class_name .joins(table_name) end .where(table_name => { association_name => select("#{association_name}_id".to_sym) }) .distinct end RUBY end