Class: RuboCop::Cop::Rails::DuplicateAssociation

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
RangeHelp, ClassSendNodeHelper
Defined in:
lib/rubocop/cop/rails/duplicate_association.rb

Overview

Looks for associations that have been defined multiple times in the same file.

When an association is defined multiple times on a model, Active Record overrides the previously defined association with the new one. Because of this, this cop’s autocorrection simply keeps the last of any duplicates and discards the rest.

Examples:


# bad
belongs_to :foo
belongs_to :bar
has_one :foo

# good
belongs_to :bar
has_one :foo

Constant Summary collapse

MSG =
"Association `%<name>s` is defined multiple times. Don't repeat associations."

Instance Method Summary collapse

Methods included from ClassSendNodeHelper

#class_send_nodes

Instance Method Details

#on_class(class_node) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rubocop/cop/rails/duplicate_association.rb', line 34

def on_class(class_node)
  offenses(class_node).each do |name, nodes|
    nodes.each do |node|
      add_offense(node, message: format(MSG, name: name)) do |corrector|
        next if same_line?(nodes.last, node)

        corrector.remove(range_by_whole_lines(node.source_range, include_final_newline: true))
      end
    end
  end
end