パーフェクトRuby on Railsで勉強中なのですが、下記コードの出力について分からないことがあります。
ruby
1class Music 2 extend ActiveModel::Callbacks 3 4 aatr_accessor :title, :created_at, :listened_at 5 6 define_model_callbacks :create 7 8 after_create ->(music){ music.created_at = Time.current} 9 10 def self.create(title: nil) 11 music = new 12 music.title = title 13 music.create 14 end 15 16 def create 17 run_callbacks :create do 18 puts "created" 19 self #ここの呼び出されるタイミング 20 end 21 end 22end
コンソール上でMusic.create(title: "test")と打ち込むと、
console
1pry(main)> Music.create(title: "test") 2created 3 4=> #<Music:0x00007ff448c09cb8 5 @created_at=Sun, 04 Nov 2018 14:04:54 UTC +00:00, 6 @title="test2">
以上の様に出力されるのですが、下記がよく分かりません。
createdと表示された後はself(オブジェクト)がreturnされているのでその中身が表示されているだけだと思うのですが、
returnした時点では、まだafter_create ->(music){ music.created_at = Time.current}は呼び出されていないはずなので、
@created_atは空のはずではないのでしょうか?
このreturnされたselfはコールバックが呼び出された後にコンソールに表示されるだけなのでしょうか。
以上よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/09 05:59