so' C'è un po 'tardi qui, ma questa domanda è uno dei migliori successi quando su Google "usa url_helpers in routes.rb" e inizialmente l'ho trovato quando mi sono imbattuto in questo problema, quindi mi piacerebbe condividere la mia soluzione.
Come @martinjlowm menzionato nella sua risposta, non è possibile utilizzare gli helper URL quando disegno nuove route. Tuttavia, lo è un modo per definire una regola di reindirizzamento della route utilizzando gli helper URL. Il fatto è che, ActionDispatch::Routing::Redirection#redirect può prendere un blocco (o un #call
-able), che è poi (quando l'utente preme il percorso) invocato con due parametri, params e richiesta, per restituire un nuovo percorso, un stringa. E poiché i percorsi sono disegnati correttamente in quel momento, è completamente valido chiamare gli helper URL all'interno del blocco!
get 'privacypolicy.php', to: redirect { |_params, _request|
Rails.application.routes.url_helpers.privacy_policy_path
}
Inoltre, siamo in grado di impiegare Rubino strutture metaprogrammazione di aggiungere po 'di zucchero:
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
Questa è una grande idea, lo adoro, grazie! –