Home > front end >  How to override method from mixin?
How to override method from mixin?

Time:08-31

I'm working in some ruby code. There's a module like the below:

module ResourceTransformation
  extend ActiveSupport::Concern

  class_methods do
    def import(resource)
    end
  end
end

In one of the classes that uses this module, I would like to override the import method. My current code looks like this:

class SomeEntity < ApplicationRecord
  include ResourceTransformation

  def import(resource)
    puts "in overriden import method!!!"
    # super
  end
end

Unfortunately, when I call SomeEntity.import it is simply invoking and returning the results from the module import method rather than from the class import method...

How can I properly override the module method with my class method?

CodePudding user response:

class_methods in your concern define class methods from given block

That's why you need override not instance but class (self) method

class SomeEntity < ApplicationRecord
  include ResourceTransformation

  def self.import(resource)
    puts "in overriden import method!!!"
  end
end
  • Related