0

我的 /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我用from inside 尝试了一些排列Dashboard.my_function,但我只是得到DashboardModule返回,而不是MyModel.

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

4

1 回答 1

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

于 2012-11-15T19:02:57.963 回答