Wenn sich am Ende von config / route.rb eine Route wie "* path" befindet,
Es stimmt vor dem Endpunkt (/ rails / active_storage / ...
) [^ 2] überein, der die ActiveStorage-Datei angibt.
[^ 2]: Klicken Sie hier für die Definition https://github.com/rails/rails/blob/v5.2.4.4/activestorage/config/routes.rb#L4
config/routes.rb
Rails.application.routes.draw do
...
get "*path" , to: redirect('/')
end
Um dies zu vermeiden, gehen Sie wie folgt vor.
config/routes.rb
Rails.application.routes.draw do
...
get '*path' , to: redirect('/'), constraints: lambda { |req|
req.path.exclude? 'rails/active_storage'
}
end
Auf diese Weise können Sie festlegen, dass die Pfade mit "Rails / Active_Storage" nicht übereinstimmen.
Interpretiert als Option zur Einschränkung des spezifischen Routings. Verwenden Sie wie folgt.
# match `/users/A12345`, but not `/users/893`
get 'users/:id', to: 'users#show', constraints: { id: /[A-Z]\d{5}/ }
# match port 3000 only
get :users, to: 'users#index', constraints: { port: '3000' }
Sie können Lambda auch wie oben beschrieben angeben. [^ 1]
get "hi", to: redirect("/foo"), constraints: ->(req) { true }
[^ 1]: Genau genommen sollten Sie ein Objekt angeben, das mit der Methode "call" aufgerufen werden kann, die "request" als Argument verwendet. Es scheint, dass das Zielrouting nur übereinstimmt, wenn der für jede Anforderung aufgerufene Aufruf true zurückgibt. Obwohl in diesem Beitrag nicht erwähnt, ist "Übereinstimmungen" auch akzeptabel. (Testcode, [Implementierung](https://github.com/ Schienen / Schienen / Blob / e44b3419d44b5fa6e66305fe703f34bb63932593 / actionpack / lib / action_dispatch / routing / mapper.rb # L41-L42)