現在、私は次のような複数のモジュールでコードを繰り返しています。
def do_something_polymorphic
self.something_polymorphic_able.where(.....).each do |thing|
...
end
end
DRYの精神で、do_something_polymorphic()
でモジュールに移動してみました/lib/shared_methods.rb
。include 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
キーワードを使用するメソッドを複数のモデル間で共有する方法はありますか?