Это фактический пример, приведенный в документации :
module MyStore
module Spree
module ProductDecorator
def some_method
...
end
end
end
end
::Spree::Product.prepend MyStore::Spree::ProductDecorator
Как вы можете видеть, на самом деле ничего не происходит, если вы не включили / prepend ::Spree::Product
в свой модуль. И вы также должны поместить свой код в свой собственный модуль, чтобы вы не забили существующий Spree::ProductDecorator
.
included do
# ...
end
Не имеет никакого отношения к Spree. Все это ActiveSupport :: Concern и включает в себя эту общую Ruby идиому:
module Spree
module ProductDecorator
def self.included(base)
base.class_eval do
after_create :assign_prototype
end
end
def assign_prototype
binding.pry
end
end
end
Module.included
- это обратный вызов, встроенный в Ruby, который позволяет вам выполнить код в контексте класса, когда модуль включен в класс. То, как вы выполняете методы доступа, проверки, обратные вызовы и т. Д. c или все, что вы обычно делаете в теле класса модели в модуле mixin.