Bạn có thể giải thích một cách chi tiết những gì :before_save
và :before_create
Ruby 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_save
hay :before_create
?
Bạn có thể giải thích một cách chi tiết những gì :before_save
và :before_create
Ruby 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_save
hay :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_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
Các hoạt động cập nhật có chính xác cùng một bộ, ngoại trừ đọc update
thay 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_save
và các before_create
cuộc gọi lại.
Việc before_save
xả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_save
cũng sẽ kích hoạt các hoạt động Cập nhật, trong khi before_create
sẽ chỉ bắn vào Creates.
after_save
hoặc after_create
?
after_save
hoặc after_create
gọi lại, self
là 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 create
phương thức thực tế được gọi. Vì vậy, before_create
vẫn có thể bị sa thải ngay cả từ save
phương pháp.
before_save
thứ 3 và before_create
thứ 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_create
chỉ 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 => :create
khô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_create
vàafter_validation_on_create
được loại bỏ kể từ Rails 3 , thay vào đó sử dụngbefore_validation
vàafter_validation
tương ứng với tùy chọn:on => :create
.