Railsのコールバックについてよく分からない箇所があったので記録を残しておきます。
モデルのCRUDなどのイベントのタイミングで特定の処理を呼び出すこと
# app/models/memo.rb
class Memo < ApplicationRecord
after_create :after_create_message #createアクション後に呼び出すメソッド名をシンボルで指定する
private
def after_create_message
puts 'memo was created!!!!'
end
end
# rails c
Memo.create
#=> 'memo was created!!!!'
# app/models/memo.rb
class Memo < ApplicationRecord
after_create MemoCallbacks.new #コールバックインスタンスを渡す
end
# app/models/memo_callbaks.rb
class MemoCallbacks
def after_create
puts 'memo was created!!!!'
end
end
# rails c
Memo.create
#=> 'memo was created!!!!'
# app/models/memo.rb
class Memo < ApplicationRecord
after_create MemoCallbacks #クラス名を渡す
end
# app/models/memo_callbaks.rb
class MemoCallbacks
def self.after_create
puts 'memo was created!!!!'
end
end
# rails c
Memo.create
#=> 'memo was created!!!!'
# app/models/memo.rb
class Memo < ApplicationRecord
after_create MemoCallbacks
end
# app/models/memo_callbaks.rb
class MemoCallbacks
def self.after_create(memo) # 引数でモデルインスタンスを渡せる
puts "title is #{memo.title}"
end
end
# rails c
Memo.create(title: 'About Rails Callback')
#=> "title is About Rails Callback"
多分これが一番使い勝手がいい
最初`after_create MemoCallbacks.new`みたいなコードを見て、インスタンスを渡しているだけで何もしていないのでは?と勘違いしてしまっていたけどActive Recordの機能の一部みたいでした。Railsは学べば学ぶほど便利だな〜。