2012-03-31 76 views
3

我有一个标准的ActiveRecord模型如下:Rails的ActiveRecord的和:追加来自ActiveRecord的继承方法,模型:: Base的

class MyModel < ActiveRecord::Base 
    custom_method :first_field, :second_field 
end 

目前,该custom_method被发送到ActiveRecord的模块回升::基础。该功能基本上可行,但当然,它每模型类,而不仅仅是MyModel它自己附加到。所以如果我的MyModel和MyOtherModel在同一个动作中,它会假定MyOtherModel有custom_method:first_field,:second_field。

所以,我的问题是:我如何连接的方法(如:高清custom_method(*参数)),以每从ActiveRecord的:: Base的继承,而不是由它连接到的ActiveRecord :: Base的本身?

任何想法赞赏。

===

编辑

的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) 
+0

听起来像关键是'custom_method'做了什么? – 2012-03-31 11:32:27

+0

打开ActionView :: Helpers :: FormHelper - > fields_for&将args从custom_method(* args)添加到任何form_for(包装在h1标签中)的顶部。 ...实际上是一个无用的宝石,但我试图找到我的脚:宝石创作。 – PlankTon 2012-03-31 11:36:26

+0

我想我们需要确切地知道它在做什么,以便猜测为什么正在进行的操作适用于所有模型(尽管看起来自定义表单构建器在这里可能更合适) – 2012-03-31 11:58:02

回答

2

你知道的后裔?

ActiveRecord::Base.descendants 

在调用它之前,您一定要确保触摸模型。

见精彩的讨论在这里:

Is there a way to get a collection of all the Models in your Rails app?

我上面说的评论者,你可能需要考虑增加你的方法对元类或中介类,或模块混入同意。

+0

优秀 - 我怀疑这正是我的想法。 (但是在我可以尝试之前必须用完 - 在几个小时内回来) – PlankTon 2012-03-31 15:50:25

相关问题