0

現在、私は次のような複数のモジュールでコードを繰り返しています。

def do_something_polymorphic
  self.something_polymorphic_able.where(.....).each do |thing|
    ...
  end
end

DRYの精神で、do_something_polymorphic()でモジュールに移動してみました/lib/shared_methods.rbinclude SharedMethodsモデルを追加すると、エラーが発生しました。

uninitialized constant Chapter::SharedMethods (NameError)

どうやって回避するのかわからなかった。

次に、モジュールファイルをモデルにロードしてみました(load 'shared_methods.rb')。ロードはOKでしたが、Module構造が名前空間をdo_something_polymorphic()破棄し、ロード/インクルードされたモデルに対して未定義でした。したがって、オブジェクトを自己参照しようとしている場合、「モジュール」はオプションではないように見えます。

最後に、shared_methods.rbファイルからモジュール構成を削除し、do_something_polymorphic()メソッドをファイルに残しました。ロードはOKですが、メソッドを実行するとエラーが発生しました。

NoMethodError: private method `do_something_polymorphic' called for #<Polymorphic_Object:0x007fc27e5b8338>

ここからどこへ行くのかわからない。これをモジュールとして設定することに戻り、「self」をオブジェクトパラメータとしてメソッドに渡そうとすることもできますが、そのオブジェクトに対してメソッドをクリーンに呼び出す機能を維持したいと思います。 current_object.do_something_polymorphic

継承ルート(私は本当に避けたい)を実行する以外に、selfキーワードを使用するメソッドを複数のモデル間で共有する方法はありますか?

4

1 に答える 1

1

アプリケーション構成を変更することにより、lib/モジュールを自動的に含めることができます。

#config/application.rb

config.autoload_paths += %W(#{config.root}/lib)
于 2012-06-17T14:48:54.667 に答える