I thought
class ApplicationController < ActionController::Base
include Foo
is to add a "mixin" -- so that all methods in the Foo module are treated as methods of the ApplicationController.
But now I see code that is
include Bar
class ApplicationController < ActionController::Base
include Foo
So why is it outside of ApplicationController
? How is that different from the more common use of putting it inside of ApplicationController
?
In simple words, the difference between include and extend is that 'include' is for adding methods only to an instance of a class and 'extend' is for adding methods to the class but not to its instance.
Ruby allows you to create a class tied to a particular object. In the following example, we create two String objects. We then associate an anonymous class with one of them, overriding one of the methods in the object's base class and adding a new method.
What is the difference between a class and a module? Modules are collections of methods and constants. They cannot generate instances. Classes may generate instances (objects), and have per-instance state (instance variables).
Yes, include Foo
inside a class adds Foo
to that class's ancestors and thus makes all of Foo
's instance methods available to instances of those class.
Outside of any class definition include Foo
will add Foo
to the ancestors of Object
. I.e. it is the same as if you did include Foo
inside the definition of the Object
class. The use doing this is that all of Foo
's instance methods are now available everywhere.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With