2010-12-05 3 views
1

Pour un de mes modèles, j'ai une méthode:Rails - Comment obtenir une URL absolue pour le site? https://example.com

def DOWNLOAD_URL url = fin xxxxx

qui fonctionne bien pour faire/xxxx/xxxx/3

ce que je veux faire est mis à jour pour inclure ce une URL absolue pour que je puisse utiliser cette méthode dans un e-mail:

https://example.com/xxxx/xxxx/3

Mais je ne wan t à coder en dur. Je veux que ce soit un var environnement il travaille sur la production dev &

+0

Comment appeler 'root_url', quand vous avez une route racine définie dans votre' routes.rb'? – Zabba

Répondre

0

Je définirais le domaine comme une constante dans development.rb & production.rb:

APP_DOMAIN = "https://mysite.com" 

Et puis il suffit d'utiliser cette constante dans votre méthode dans le modèle:

def download_url 
    "#{APP_DOMAIN}/download/#{id}" 
end 
2

Les e-mails sont effectivement des vues et peuvent utiliser des aides. Le modèle ne doit pas vraiment avoir de connaissances sur les vues. Au lieu de cela, vous devez utiliser url_for ou l'une de ses méthodes descendantes dans le modèle d'affichage d'e-mail pour générer une URL. Ces assistants peuvent générer des URL absolues en fonction de l'emplacement de l'application (et de la configuration associée - vous devez définir config.action_mailer.default_url_options[:host] dans votre fichier d'environnement) sans avoir à manipuler les variables d'environnement et autres.

0

Il peut être moche, mais c'est nécessaire. Les applications Rails ne connaissent pas et ne doivent pas connaître leur URL racine. C'est un travail pour le serveur web. Mais, hardcoding suce ...

Si vous utilisez capistrano ou une autre méthode de déploiement, vous pouvez définir l'hôte du serveur dans une variable et l'écrire dans un fichier que vous pouvez lire depuis l'application.

Questions connexes