Diogo Wernik
Diogo Wernik

Reputation: 638

Rails Load an array of subclasses from a folder automatically

I am working with heritage on rails models. I have this class on the file:

models/custom_class.rb


class CustomClass < ApplicationRecord
    def self.available_from_my_class
        [
            CustomClasses::CustomClassA,
            CustomClasses::CustomClassB,
            CustomClasses::CustomClassC,
            (...)
        ]
    end

    def self.type
        raise "You must override this method in each model inheriting from CustomClass"
    end
end

That works fine and loads an array, but I have to declare each subclass manually.

Then I have a folder with that classes:

models/custom_classes/custom_class_a.rb
models/custom_classes/custom_class_b.rb
models/custom_classes/custom_class_c.rb

With the code that inheritance in each:

class CustomClasses::CustomClassA < CustomClass
    def self.to_s
        "Custom Class A"
    end


    def self.type
        "CustomClassA"
    end
end

I would like to know how could I load an array of all the subclasses on the folder models/custom_classes/ automatically on available_from_my_class at models/custom_class.rb

I tried:


class CustomClass < ApplicationRecord
    def self.available_from_my_class
        [
            # Load all the Subclasses from the folder custom_classes
            CustomClasses::Subclasses.all
            # got the error uninitialized constant  CustomClasses::Subclasses

        ]

    end

end

But didn`t work.

Upvotes: 1

Views: 466

Answers (1)

mechnicov
mechnicov

Reputation: 15437

config.autoload_paths += Dir[Rails.root.join('app', 'models', '**/')]

And all files from subfolder will be autoloaded

CustomClass.descendants

returns descendants of class

Upvotes: 1

Related Questions