Tôi đã đọc tài liệu tại http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html , nhưng không hiểu khi nào các lệnh around_*
gọi lại được kích hoạt liên quan đến before_*
và after_*
.
Bất kỳ giúp đỡ nhiều đánh giá cao.
Cảm ơn.
Tôi đã đọc tài liệu tại http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html , nhưng không hiểu khi nào các lệnh around_*
gọi lại được kích hoạt liên quan đến before_*
và after_*
.
Bất kỳ giúp đỡ nhiều đánh giá cao.
Cảm ơn.
Câu trả lời:
around_*
callbacks được gọi trước hành động, sau đó khi bạn muốn gọi chính hành động đó, bạn yield
phải thực hiện nó, sau đó tiếp tục thực thi. Đó là lý do tại sao nó được gọi làaround
Trình tự đi như thế này: before
, around
, after
.
Vì vậy, một điển hình around_save
sẽ trông như thế này:
def around_save
#do something...
yield #saves
#do something else...
end
Lệnh gọi lại around_ * được gọi xung quanh hành động và bên trong các hành động before_ * và after_ *. Ví dụ:
class User
def before_save
puts 'before save'
end
def after_save
puts 'after_save'
end
def around_save
puts 'in around save'
yield # User saved
puts 'out around save'
end
end
User.save
before save
in around save
out around save
after_save
=> true