Ruby on Rails

継承先クラスでオーバーライドされたメソッドを継承元クラスから呼び出す

環境

Ruby 2.5.0
Rails 5.2.0

元々がJava使いだったもので、RoRを使っていても複雑な処理などは親子関係を使って処理を共通化できるか検討することが多い。

concern等を検討することももちろんあるが、バッチでいろんな種類の集計処理をするときなどは集計用親クラスをどーんと作ってしまった方が恩恵が多い気がする。

ということで、今回は継承の話。

以下のようなクラス群があったとする。

親クラス

子クラス

孫クラス

このような作りだと、当然呼び出す側の心理としては親クラスのdaily_taskを1発呼んで全ての集計をまとめて行いたい。
ということで、以下にexec_daily_taskを用意した。

しかし、このexec_daily_taskを呼び出しても何も起きない。沈黙。完全スルー。
あれれー?と思いデバッグしたところ、self.descendantsが空の配列になっていた。そら何も起きんわ。

どうやらdescendantsを使うには、読み込み先のファイルが事前にロードされている必要があるんですね。

なので、以下のようにrequire_dependencyを足してあげましょう。

これで無事継承先のメソッドを呼び出せました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です