#はじめに
ユーザー管理で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を使えば、オーバーライドする前の処理を呼び出すことができるということです。