Bạn có thể giải thích một cách chi tiết những gì :before_savevà :before_createRuby on Rails callbacks, và những gì họ phải làm với Rails kiểm chứng thực? Có xác nhận xảy ra sau :before_savehay :before_create?
Bạn có thể giải thích một cách chi tiết những gì :before_savevà :before_createRuby on Rails callbacks, và những gì họ phải làm với Rails kiểm chứng thực? Có xác nhận xảy ra sau :before_savehay :before_create?
Câu trả lời:
Trong thao tác tạo bên dưới Rails, có sáu cuộc gọi lại trước hoạt động cơ sở dữ liệu và hai lần sau. Theo thứ tự, đây là:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveCác hoạt động cập nhật có chính xác cùng một bộ, ngoại trừ đọc updatethay vì createở mọi nơi (và CẬP NHẬT thay vì INSERT ).
Từ điều này, bạn có thể thấy rằng xác nhận được thực hiện trước before_savevà các before_createcuộc gọi lại.
Việc before_savexảy ra một chút trước khi before_create. Theo hiểu biết tốt nhất của tôi, không có gì xảy ra giữa họ; nhưng before_savecũng sẽ kích hoạt các hoạt động Cập nhật, trong khi before_createsẽ chỉ bắn vào Creates.
after_savehoặc after_create?
after_savehoặc after_creategọi lại, selflà bản ghi vừa được lưu, vì nó tồn tại sau khi lưu. Đó là lĩnh vực bao gồm autogenerated thích id, created_at, updated_at.
before_createđề cập đến một đối tượng mới đang được lưu vào cơ sở dữ liệu, chứ không phải createphương thức thực tế được gọi. Vì vậy, before_createvẫn có thể bị sa thải ngay cả từ savephương pháp.
before_savethứ 3 và before_createthứ 5.
before_saveđược gọi mỗi khi một đối tượng được lưu. Vì vậy, đối với các đối tượng mới và hiện có. (tạo và cập nhật hành động)
before_createchỉ trước khi sáng tạo. Vì vậy, chỉ cho các đối tượng mới (tạo hành động)
before_create đấu với before_save :on => :create
Đôi khi bạn phải cẩn thận với thứ tự của các cuộc gọi lại
Xem tại đây để biết thêm chi tiết: http://pOLLallabs.com/activerecord-callbacks-autosave-b Before-this- and-
that-etc /
before_save :on => :createkhông hoạt động (ít nhất là trên đường ray 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createvàafter_validation_on_createđược loại bỏ kể từ Rails 3 , thay vào đó sử dụngbefore_validationvàafter_validationtương ứng với tùy chọn:on => :create.