Chcę dynamicznie generować metodę klasy w Mixin, w oparciu o nazwę klasy, która zawiera ten Mixin.Szyny: dynamicznie definiuj metodę klasy opartą na nadrzędnej nazwie klasy w module/problemie
Tu jest mój bieżący kod:
module MyModule
extend ActiveSupport::Concern
# def some_methods
# ...
# end
module ClassMethods
# Here is where I'm stuck...
define_method "#{self.name.downcase}_status" do
# do something...
end
end
end
class MyClass < ActiveRecord::Base
include MyModule
end
# What I'm trying to achieve:
MyClass.myclass_status
Ale to daje mi następujące nazwy metoda:
MyClass.mymodule::classmethods_status
Pierwsze nazwę klasy bazowej wewnątrz pracach definition metoda (self, self.name. ..) ale nie mogę sprawić, żeby to działało dla nazwy metody ...
Do tej pory próbowałem
define_method "#{self}"
define_method "#{self.name"
define_method "#{self.class}"
define_method "#{self.class.name}"
define_method "#{self.model_name}"
define_method "#{self.parent.name}"
Ale nic z tego nie zdaje rade:/
Czy jest jakiś sposób mogę odzyskać nazwę klasy bazowej (nie wiem jak to nazwać, które obejmują klasę mój moduł). Mam zmaga się z tym problemem przez wiele godzin, a ja teraz nie potrafię wymyślić czyste rozwiązanie :(
Dzięki
Thanks dla wyjaśnienia. Użyłem 'define_singleton_method' wewnątrz' included do # ... end' block: 'define_singleton_method" # {self.name} _status "do # ... end' ' – cl3m