0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

備忘録 railsの継承関係をちょっとだけ理解できた

Posted at

初めてrailsを触った時、
クラス・モジュールの継承知識がないまま以下の文を見たので
『なんでApplicationクラスがApplicationクラスを継承してんだよ』
と頭の中が?でいっぱいになった思い出があります。

config/application.rb
module Hoge
  class Application < Rails::Application
  #省略
  end
end

ちょっとは理解が深まったので改めて継承関係を確認してみることに

$ rails console

Applicationクラスの親クラスを表示(継承関係は見えているが一応、、、)

irb(main):001:0> Application.superclass
Traceback (most recent call last):
        1: from (irb):1
NameError (uninitialized constant Application)

ん、なんでだ?Applicationクラスじゃないのか?
と思ったがコードを見るとHogeモジュールに属しているじゃないか。
モジュール配下にあるクラスは
モジュール名::クラス名
で取得できます。

irb(main):003:0> Taskleaf::Application.superclass
=> Rails::Application

そりゃそうですよね。

Hogeモジュール配下のApplicationクラスは
Railsモジュール配下のApplicationクラスを継承していたんですね。

同じApplicationという名前のクラスだが、
モジュールで名前空間を作ることで区別できているんです。

Rails::Applicationクラスの親クラスはどうなっているんだろう?
ancestorsメソッドでみてみましょう。

irb(main):004:0> Rails::Application.ancestors
=> [Rails::Application, Rails::Engine, Rails::Railtie, Rails::Initializable, ActiveSupport::ToJsonW
ithActiveSupportEncoder, Object, PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, A
ctiveSupport::Tryable, ActiveSupport::Dependencies::Loadable, Kernel, BasicObject]

なんじゃこりゃ、みたことないモジュールやクラスがいっぱい、、、
今度調べてまとめるかな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?