Rack-Middleware und ActionCo Die Filter sind sehr unterschiedlich.
Rack ist die standardmäßige Ruby-Webserver-Schnittstelle. Es ist so konzipiert, dass Rack-Anwendungen oder "Middlewares" miteinander verkettet werden können, wobei jede die Anfrage/Antwort in einer bestimmten Weise transformiert. Wenn Sie eine Rack Middleware erstellen/verwenden, haben Sie die Möglichkeit, die Anfrage zu transformieren, bevor sie tatsächlich die Rails App erreicht.
ActionController Filter sind einfach vor/nach Hooks, die vor oder nach Ihren unmittelbaren Controller-Methoden in Rails ausgeführt werden. Diese werden unmittelbar vor oder nach Ihrer Controller-Methode aufgerufen, aber nach der gesamte Rest des Rails-Stacks.
Daher gibt es erhebliche Unterschiede in den Möglichkeiten, die über einen Rack Middleware- und einen ActionController-Filter möglich sind. Da eine Rack Middleware vor Ihrem Anwendungscode ausgeführt wird, wird sie nicht im selben Umfang wie der Anwendungscode ausgeführt. z.B Sie können Ihre App-Modelle usw. nicht verwenden, es sei denn, Sie benötigen sie explizit und führen die erforderliche Initialisierung durch (z. B. Herstellen einer Datenbankverbindung).
Wenn Sie nach Faustregeln, aus der Spitze von meinem Kopf ist hier suchen, was ich Ihnen sagen würde:
Wenn Sie etwas mit der Bitte, bevor Methoden in einem bestimmten Controller nur tun wollen Verwenden Sie einen Vorher-Filter in diesem Controller.
Wenn Sie etwas mit der Anfrage vor allen Controller-Methoden in Ihrer App tun möchten und was Sie tun möchten, ist sehr spezifisch für Ihre Anwendung oder nutzt Ihren Anwendungscode, verwenden Sie einen Filter auf Ihrem ApplicationController.
Wenn Sie etwas Generisches mit der Anfrage machen wollen, nicht an Ihren Anwendungscode gebunden sind, und Sie sich vorstellen, dass es schön wäre, das in einer anderen App wiederverwenden zu können, wäre eine Rack Middleware Besser passen.
Hoffe, dass hilft.