2010-05-11 26 views
5

Cách duy nhất để xác định cuộc gọi lại cho các sự kiện after_find và after_initialize là xác định chúng dưới dạng phương thức. Nếu bạn cố gắng tuyên bố họ là những người xử lý bằng kỹ thuật thứ hai, họ sẽ bị bỏ qua một cách thầm lặng.Tại sao gọi lại cho các sự kiện after_find và after_initialize là xác định chúng dưới dạng phương thức?

Ai đó có thể giải thích tại sao lại như vậy?

Tại sao cụ thể cho hai cuộc gọi lại này?

EDIT

Từ cuốn sách: - Rails có sử dụng tion reflec- để xác định xem có callbacks được gọi. Khi thực hiện các hoạt động cơ sở dữ liệu thực, chi phí thực hiện điều này thường không đáng kể so với chi phí cơ sở dữ liệu. Tuy nhiên, một câu lệnh chọn cơ sở dữ liệu duy nhất có thể trả về hàng trăm hàng và cả hai cuộc gọi lại sẽ phải được gọi cho mỗi hàng. Điều này làm chậm truy vấn xuống đáng kể. Nhóm Rails quyết định rằng hiệu suất vượt trội nhất quán trong trường hợp này. Cái quái gì ... !!!! Thats tất cả .. Chỉ cần đây là lời giải thích ... !!!

Trả lời

2

Từ the API:

Các after_find và after_initialize ngoại lệ

Vì after_find và after_initialize được gọi cho từng đối tượng phát hiện và khởi tạo bởi một công cụ tìm, chẳng hạn như Base.find (: tất cả), chúng tôi đã phải thực hiện một ràng buộc hiệu suất đơn giản (tăng thêm 50% tốc độ trên một trường hợp thử nghiệm đơn giản). Không giống như tất cả các callbacks khác, after_find và after_initialize sẽ chỉ được chạy nếu thực thi rõ ràng được định nghĩa (def after_find). Trong trường hợp đó, tất cả các kiểu gọi lại sẽ được gọi.

+0

Yaa i book i m sử dụng như giải thích refrence cho rằng có: - Rails phải sử dụng phản xạ để xác định xem có callback được gọi. Khi thực hiện các hoạt động cơ sở dữ liệu thực, chi phí thực hiện điều này thường không đáng kể so với chi phí cơ sở dữ liệu. Tuy nhiên, một câu lệnh chọn cơ sở dữ liệu duy nhất có thể trả về hàng trăm hàng và cả hai cuộc gọi lại sẽ phải được gọi cho mỗi hàng. Điều này làm chậm truy vấn xuống đáng kể. Nhóm Rails quyết định rằng hiệu suất vượt trội nhất quán trong trường hợp này. Cái quái gì ... !!!! –

Các vấn đề liên quan