gpt4 book ai didi

ruby-on-rails - rails : callbacks from module

转载 作者:行者123 更新时间:2023-12-04 16:49:10 29 4
gpt4 key购买 nike

我尝试这样做:

应用程序/模型/my_model.rb:

class MyModel <  ActiveRecord::Base
include MyModule
...
end

lib/my_module.rb:
module MyModule
before_destroy :my_func #!

def my_func
...
end
end

但我收到一个错误:
undefined method `before_destroy' for MyModule:Module

我该如何纠正它。

我也是 ruby 的新手。这些“属性”是什么类型:before_destroy、validates、has_many?
它们是变量还是方法还是什么?
谢谢

最佳答案

before_destroy , validates等不是属性或类似的东西。这些是方法调用。

在 ruby​​ 中,类的主体都是可执行代码,这意味着类主体的每一行都由解释器执行,就像方法主体一样。
before_destroy :my_func是一个常用的 ruby​​ 方法调用。被调用的方法是 before_destroy , 它接收一个符号 :my_func作为论据。在调用它的范围内的类(或模块)中查找此方法。

所以继续你的问题,我想现在你应该明白当解释器加载你的模块时

module MyModule
before_destroy :my_func #!

def my_func
...
end
end

它开始执行它的主体并搜索方法 before_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

关于ruby-on-rails - rails : callbacks from module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210061/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com