[RAILS] Évitez de faire correspondre le chemin * à la fin de routes.rb lorsque vous accédez à l'URL du fichier [ActiveStorage]

S'il y a une route telle que * path à la fin de config / routes.rb, Il correspond avant le point de terminaison (/ rails / active_storage / ...) [^ 2] qui indique le fichier ActiveStorage.

[^ 2]: Cliquez ici pour la définition 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

Pour éviter cela, procédez comme suit.

config/routes.rb


Rails.application.routes.draw do
  ...

  get '*path' , to: redirect('/'), constraints: lambda { |req|
    req.path.exclude? 'rails/active_storage'
  }
end

Cela vous permet de définir les chemins contenant rails / active_storage pour qu'ils ne correspondent pas.

À propos de l'option contraintes

Interprété comme une option pour imposer des contraintes sur des itinéraires spécifiques. Utilisez comme suit.

# 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' }

Vous pouvez également spécifier lambda comme décrit ci-dessus. [^ 1]

get "hi", to: redirect("/foo"), constraints: ->(req) { true }

[^ 1]: À proprement parler, vous devez spécifier un objet qui peut être appelé par la méthode call qui prend request comme argument. Il semble que le routage cible ne correspond que lorsque call appelé pour chaque requête retourne true. Bien que cela ne soit pas mentionné dans cet article, «correspond?» Est également acceptable. (Code de test, [Implementation](https://github.com/ rails / rails / blob / e44b3419d44b5fa6e66305fe703f34bb63932593 / actionpack / lib / action_dispatch / routing / mapper.rb # L41-L42)

référence

Recommended Posts

Évitez de faire correspondre le chemin * à la fin de routes.rb lorsque vous accédez à l'URL du fichier [ActiveStorage]
Pourquoi insérer un saut de ligne à la fin du fichier