如何从模块中获取扩展模块的类的名称?

时间:2012-11-15 18:21:48

标签: ruby-on-rails ruby ruby-on-rails-3 oop activerecord

我的/ app / 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.name内尝试了Dashboard.my_function的一些排列,但我只是返回DashboardModule,而不是MyModel

任何能够阐明如何做到这一点的人都将不胜感激。

1 个答案:

答案 0 :(得分: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,而不是直接在模型类上调用它 - &gt; MyModel.my_function会返回MyModel