我是Rails的新手,但在使用其他语言(例如Java)编写代码方面有相当多的经验。好吧,我喜欢Ruby的元编程。
通常情况下,当我学习Rails的时候......我看到一些插件,比如public_activity,或其他可以简单地做的事情
include Namespace::SomeModel
而且,在public_activity的情况下,他们的SomeModel方法在创建记录之前以某种方式被调用。我怀疑before_create包含在SomeModel中。所以...我开始尝试但是被困住了,显然,before_create变得不可用于我所拥有的SomeModel类,它位于目录中手动自动加载到rails s上。
我想问的是,如何通过包含SomeModel,其中一个方法是在ActiveRecord上调用create事件?
我刚刚下载了代码的源代码,但是......这需要时间。而且,只是为了预料到我找不到答案;你们是比无声代码更好的老师。所以,给我时间回答即使是最轻微的暗示。感谢。
答案 0 :(得分:0)
这是一个非常着名的程序
Module NewModule
extend ActiveSupport::Concern
def self.included(base)
base.after_create :a_method
end
def a_method
# your_code_here
end
end
class A < ActiveRecord::Base
include NewModule
end
使用ActiveSupport :: Extend,您可以相应地将NewModule的类和实例方法提供给A
。
NewModule.included
代码在NewModule
包含在另一个类中时执行。
答案 1 :(得分:0)
Rails允许扩展您包含模块的类。基本技术在http://api.rubyonrails.org/classes/ActiveSupport/Concern.html#method-i-included中描述
这允许&#34;设置&#34;一个模块,比如
module Foo
extend ActiveSupport::Concern
included do
# Within this area "self" now refers to the class in which the module is included
# Every method you now call is called agains the class
# As such you can now write things like
validates_inclusion_of ...
define_method ...
end
end