Ruby on Rails
Sunday, October 12, 2014
On Friday, 10 October 2014 09:08:29 UTC-4, rusik wrote:
Hello all.In this example, as i understand that included block is running when Exclaimable module is included in Person and after a Person class methods are 'initialized'
No. See below for additional information, but if `include Exclaimable` is the first thing in a class definition, only methods defined on the declaring class's superclass (Object, in the case of Person) will be available.
require 'active_support/concern'module Exclaimable
extend ActiveSupport::Concern
included do
self.new.hello
end
endclass Person
include Exclaimable
def hello
puts 'person hello'
end
endOutput: Exception: NoMethodError: undefined method `hello' for #<Person:0x00000103cbdcd0>But i see that, Person class doesn't have hello method, why ? Please, help !
The stuff between `class Person` and `end` is just code. The `hello` method isn't available yet because it hasn't been DEFINED yet when `include Exclaimable` executes.
So, i can't understand - what diifference betweenincluded do
self.new.hello
endand class method:self.included(base)
base.new.hello
endBoth code get same error ( see above )
`self.included` is Ruby's built-in hook. ( http://www.ruby-doc.org/core-2.1.3/Module.html#method-i-included ) It gets called when the module that declares it is included in another module or class.
`ActiveSupport::Concern` adds the `included do` idiom, to make situations where one module depends on another more straightforward. See the last section of the docs for more:
http://api.rubyonrails.org/classes/ActiveSupport/Concern.html
--Matt Jones
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/d54def3c-678d-4188-b0e5-63fbec468f8d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment