4
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.

deviseコントローラーで出逢ったsuperについて調べてみた

Posted at

#はじめに
ユーザー管理でdeviseを使っています。コントローラーをいじっていると、メソッドの中にsuperとだけ記述があるメソッドがあったので、疑問に思い、調べてみました。

##deviseのコントローラー

rails g devise:controllers user

でコントローラーを生成しています。

user/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
  (略)
  def update
    super
  end
  (略)
end

どうやら、Devise::RegistrationsControllerクラスから継承されているようです。
いくつかのメソッドの中にsuperが存在します。

##superとは
ずばり、superは、継承元のメソッドを呼び出すことができるメソッドです。
上記のコントローラーを例にすると、
Devise::RegistrationsControllerにもupdateメソッドが記述されており、
このUsers::RegistrationsControllerでも同じ処理をすることができるということです。

###他の例では…
以下は調べている中で、よく見かけた説明です。

class Tennis
  def ball
    puts "Tennisball"
  end
end

class Sports < Tennis
  def ball
    super
    puts "balls"
  end
end

sports = Sports.new
sports.ball
#=>Tennisball
sports = Sports.new
sports.ball
#=>balls

自分で例えとして作ったら、意味不なコードになりました…
要は、継承後に同じ名前でメソッドを作っても、superを使えば、オーバーライドする前の処理を呼び出すことができるということです。

4
0
1

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
4
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?