class RuboCop::Cop::Rails::UnusedIgnoredColumns

This cop suggests you remove a column that does not exist in the schema from `ignored_columns`. `ignored_columns` is necessary to drop a column from RDBMS, but you don't need it after the migration to drop the column. You avoid forgetting to remove `ignored_columns` by this cop.

@example

# bad
class User < ApplicationRecord
  self.ignored_columns = [:already_removed_column]
end

# good
class User < ApplicationRecord
  self.ignored_columns = [:still_existing_column]
end

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rails/unused_ignored_columns.rb, line 35
def on_send(node)
  return unless (columns = ignored_columns(node))
  return unless schema

  table = table(node)
  return unless table

  columns.children.each do |column_node|
    check_column_existence(column_node, table)
  end
end

Private Instance Methods

check_column_existence(column_node, table) click to toggle source
# File lib/rubocop/cop/rails/unused_ignored_columns.rb, line 49
def check_column_existence(column_node, table)
  column_name = column_name(column_node)
  return unless column_name
  return if table.with_column?(name: column_name.to_s)

  message = format(MSG, column_name: column_name)
  add_offense(column_node, message: message)
end
class_node(node) click to toggle source
# File lib/rubocop/cop/rails/unused_ignored_columns.rb, line 58
def class_node(node)
  node.each_ancestor.find(&:class_type?)
end
table(node) click to toggle source
# File lib/rubocop/cop/rails/unused_ignored_columns.rb, line 62
def table(node)
  klass = class_node(node)
  schema.table_by(name: table_name(klass))
end