挨拶
こんにちは、プレイライフの熊崎です!
最近はあったかくなって、お出かけ日和ですね!
コロナでなければ、どこかお出かけにでも行きたい気分なのですが、こんなご時世なので粛々と学習のアウトプットをしていきたいと思います笑
背景
今回、実務でフォームオブジェクトを作ることになり、その際にinitializeメソッドを使いました。
自分でフォームオブジェクトを作るにあたって、既存のフォームオブジェクトのソースリーディングを行っていました。その際に既存のコードが以下のような感じだったが、どのような挙動をしているかわからなかったので、まとめました。
コード例(一部コードを省略しております。)
Class hogehoge
include ActiveModel::Model
def initialize(name, attributes = {})
@name = name
super(attributes)
end
end
superとは
スーパークラス(親クラス)のメソッドを呼び出す。
引数がついている場合は、引数つきでそのメソッドを実行する。
今回の場合は、、、
Activemodel::Modelのinitializeメソッドを呼び出す。
Activemodel::Modelのinitializeはどうなってるか?
以下、公式のgithubリポジトリから引用
def initialize(attributes = {})
assign_attributes(attributes) if attributes
super()
# ここのsuper()は正直理解できておりません、、、 どなたかご存知の方がいらっしゃれば、コメントなどを頂けますと幸いです。
end
# assign_attributesメソッドは、Activemodel::Modelがインクルードしている、ActiveModel::AttributeAssignmentに入っています。
ActiveModel::modelのintializeメソッドに、assign_attributesメソッドがあって、attributes内に入っている属性を変更してくれている。ということでした1
assign_attributesメソッド
複数の属性を変更したいときに使用される
https://qiita.com/tyamagu2/items/8abd93bb7ab0424cf084
最後に
まだまだ未熟ゆえに、間違っていることを書いていることもあると思います。(なるべくそのようなことのないよう、気をつけてはおりますが、、、)
もし、間違い等ございましたらコメントにてご指摘いただけますと幸いです。