2012-11-15 132 views
0

我在我的/应用/ models文件夹下面的模型:如何从模块中获取扩展模块的类的名称?

class MyModel < ActiveRecord::Base 
    require "dashboard" 
    extend Dashboard 

# ... 
end 

然后我在我的/ lib文件夹名为dashboard.rb文件,该文件具有下面的代码:

module Dashboard 
    def self.my_function 
    # --> My question pertains to what I need to put here... 
    end 
end 

我想在MyModel::Dashboard.my_function中写一行代码,这样它会返回我的模型的名称(在这种情况下为MyModel)。

我确实发现了一些关于Get class name from a modulehttps://gist.github.com/1014971的信息,但好像当我的模型继承自ActiveRecord::Base时,情况就不同了。后面的这些文章据说可以解释这一点,但我不知所措。

我尝试了一些置换与superclass.nameDashboard.my_function内,但我只是得到Dashboard或退回Module,而不是MyModel

任何人谁可以阐明如何做到这一点将不胜感激。

+0

做你的方法必须是类方法(..can你做myModel - > MyModel.first.my_function)的my_function调用)? – flynfish

回答

2

通过使用extend,您正在制作MyModel类的模块方法类方法。试试这个:

module Dashboard 
    def my_function 
    self.name 
    end 
end 


class MyModel < ActiveRecord::Base 
    require "dashboard" 
    extend Dashboard 

    # ... 
end 

而不是调用它MyModel::Dashboard.my_function你只需直接调用它在你的模型类 - >MyModel.my_function将返回MyModel