Sé que' Estoy un poco tarde aquí, pero esta pregunta es uno de los principales éxitos cuando se busca en Google "use url_helpers en routes.rb", y al principio lo encontré cuando me encontré con este problema, así que me gustaría compartir mi solución.
Como @martinjlowm mencionó en su respuesta, uno no puede usar URL helpers cuando dibuja nuevas rutas. Sin embargo, hay es una forma de definir una regla de ruta de redirección utilizando ayudantes de URL. La cosa es, ActionDispatch::Routing::Redirection#redirect puede tomar un bloque (o una -able #call
), que es más tarde (cuando el usuario pulsa la ruta) se invoca con dos parámetros, params y solicitud, para volver una nueva ruta, una cuerda. Y como las rutas se dibujaron correctamente en ese momento, ¡es completamente válido llamar a los ayudantes de URL dentro del bloque!
get 'privacypolicy.php', to: redirect { |_params, _request|
Rails.application.routes.url_helpers.privacy_policy_path
}
Además, podemos emplear instalaciones metaprogramación Ruby de añadir un poco de azúcar:
class UrlHelpersRedirector
def self.method_missing(method, *args, **kwargs) # rubocop:disable Style/MethodMissing
new(method, args, kwargs)
end
def initialize(url_helper, args, kwargs)
@url_helper = url_helper
@args = args
@kwargs = kwargs
end
def call(_params, _request)
url_helpers.public_send(@url_helper, *@args, **@kwargs)
end
private
def url_helpers
Rails.application.routes.url_helpers
end
end
# ...
Rails.application.routes.draw do
get 'privacypolicy.php', to: redirect(UrlHelperRedirector.privacy_policy_path)
end
¡Es una gran idea, me encanta, gracias! –