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モデルの名前(この場合)が返されるように、コードを1行記述したいと思いMyModelます。

モジュールhttps://gist.github.com/1014971からクラス名を取得する方法についていくつかの情報を見つけましたが、モデルがから継承する場合はActiveRecord::Base異なるようです。これらの記事の後者はおそらくこれを説明していますが、私は途方に暮れています。

superclass.name内からいくつかの順列を試しましDashboard.my_functionたが、取得DashboardまたはModule返されるだけで、ではありません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 に答える