Kệ middleware và ActionCo ntroller Bộ lọc thực sự khá khác nhau.
Giá là giao diện máy chủ web Ruby chuẩn. Nó được thiết kế để hoạt động theo cách mà các ứng dụng Rack hoặc "Middlewares" có thể được xích lại với nhau, mỗi biến đổi yêu cầu/đáp ứng theo một cách cụ thể. Nếu bạn tạo/sử dụng Rack Middleware, bạn sẽ có cơ hội chuyển đổi yêu cầu trước khi nó thực sự đến được ứng dụng Rails.
Bộ lọc ActionController chỉ đơn giản là trước/sau khi móc thực thi trước hoặc sau các phương pháp điều khiển tức thời của bạn trong Rails. Các lệnh này sẽ được gọi ngay trước hoặc sau phương thức điều khiển của bạn, nhưng sau toàn bộ phần còn lại của ngăn xếp Rails. Do đó có sự khác biệt đáng kể trong những gì có thể thông qua Rack Middleware và bộ lọc ActionController, cụ thể là vì Rack Middleware đang thực thi trước mã ứng dụng của bạn, nó sẽ không được thực hiện trong phạm vi tương tự như mã ứng dụng của bạn - ví dụ bạn sẽ không thể sử dụng các mô hình ứng dụng của mình, trừ khi bạn yêu cầu chúng một cách rõ ràng và thực hiện khởi tạo cần thiết (như thiết lập kết nối cơ sở dữ liệu).
Nếu bạn đang tìm kiếm quy tắc của ngón tay cái, ra khỏi đỉnh đầu của tôi ở đây là những gì tôi sẽ nói với bạn:
Nếu bạn muốn làm điều gì đó với các yêu cầu trước khi phương pháp duy nhất trong một bộ điều khiển cụ thể , sử dụng bộ lọc trước trong bộ điều khiển đó.
Nếu bạn muốn làm điều gì đó với yêu cầu trước khi tất cả các phương pháp điều khiển trong ứng dụng của bạn, và những gì bạn muốn làm là rất cụ thể cho ứng dụng của bạn hoặc dựa vào mã ứng dụng của bạn, hãy sử dụng bộ lọc trên ApplicationController của bạn.
Nếu bạn muốn làm điều gì đó chung chung với yêu cầu, không gắn với mã ứng dụng của bạn, và bạn tưởng tượng sẽ tốt hơn nếu có thể sử dụng lại trong ứng dụng khác, Rack Middleware sẽ là phù hợp hơn.
Hy vọng điều đó sẽ hữu ích.