【发布时间】:2012-04-14 20:59:58
【问题描述】:
我有一个标准的 ActiveRecord 模型,具有以下内容:
class MyModel < ActiveRecord::Base
custom_method :first_field, :second_field
end
目前,custom_method 被发送到 ActiveRecord::Base 的模块接收。该功能基本上可以工作,但当然,它附加到 每个 模型类,而不仅仅是 MyModel。因此,如果我在同一个操作中有 MyModel 和 MyOtherModel,它将假定 MyOtherModel 也有 custom_method :first_field, :second_field。
所以,我的问题是:如何将方法(例如:def custom_method(*args))附加到从 ActiveRecord::Base 继承的 每个 类,而不是将其附加到 ActiveRecord ::基地本身?
任何想法表示赞赏。
===
编辑
custom_method 目前通过以下方式附加到 ActiveRecord::Base:
module MyCustomModule
def self.included(base)
base.extend(self)
end
def custom_method(*args)
# Zippity doo dah - code goes here
end
end
ActiveRecord::Base.send(:include, MyCustomModule)
【问题讨论】:
-
听起来关键是
custom_method做了什么? -
打开 ActionView::Helpers::FormHelper --> fields_for & 将来自 custom_method(*args) 的 args 附加到任何 form_for 的顶部(包装在 h1 标签中)。 …实际上是一个无用的宝石,但我正试图找到我的脚:宝石创造。
-
为什么不定义一个继承自 ActiveRecord::Base 的类,并让你的模型继承自它呢?或者这是您想要完全隐藏的东西,以便其他开发人员可以继续从 ActiveRecord::Base 继承并获得功能而无需明确请求?
-
我想看看您包含的模块以及您如何附加附加方法。您误入了元编程领域,我认为您所做的是将方法附加到基类,您应该将方法附加到元类。看看这个:reference.jumpingmonkey.org/programming_languages/ruby/…
-
如果您从 custom_method 内部调用 define_method 只会将方法添加到相关模型中
标签: ruby-on-rails ruby activerecord