Ruby on rails Rails:来自模块的回调
我尝试这样做: app/models/my_model.rb:Ruby on rails Rails:来自模块的回调,ruby-on-rails,module,mixins,Ruby On Rails,Module,Mixins,我尝试这样做: app/models/my_model.rb: class MyModel < ActiveRecord::Base include MyModule ... end 但我有一个错误: undefined method `before_destroy' for MyModule:Module 我怎样才能改正呢 而且我对ruby还是新手。什么类型有这些“属性”:在销毁、验证之前,有多少? 它们是变量还是方法还是什么? 感谢lib/my_module.rb中的,请
class MyModel < ActiveRecord::Base
include MyModule
...
end
但我有一个错误:
undefined method `before_destroy' for MyModule:Module
我怎样才能改正呢
而且我对ruby还是新手。什么类型有这些“属性”:在销毁、验证之前,有多少?
它们是变量还是方法还是什么?
感谢lib/my_module.rb中的,请执行以下操作: class MyInheritedClass < ActiveRecord::Base before_destroy :my_func def my_func ... end end class MyModel < MyInheritedClass ... end 类MyInheritedClass
希望这有帮助。=)
在销毁之前,验证等都不是属性或类似的东西。这些是方法调用
在ruby中,类的主体都是可执行代码,这意味着类主体的每一行都是由interpeter执行的,就像方法主体一样
销毁之前的:my\u func
是一个常见的ruby方法调用。被调用的方法是_destroy
之前的,它接收一个符号:my_func
作为参数。在调用该方法的范围内的类(或模块)中查找该方法
接下来是你的问题,我想现在你应该明白当解释器加载你的模块时
module MyModule
before_destroy :my_func #!
def my_func
...
end
end
它开始执行其主体,并在该模块中的\u destroy
之前搜索方法,但找不到。您要做的不是在模块上调用此方法,而是在包含模块的类上调用此方法。为此,我们使用Module#included
方法有一个常见的习惯用法:
module MyModule
module InstanceMethods
def my_func
...
end
end
def self.included(base)
base.send :include, InstanceMethods
base.before_destroy :my_func
end
end