Comment utiliser la méthode de route auxiliaire à partir du fichier dans le répertoire lib?

J'ai besoin d'utiliser une méthode
root_url

de la méthode définie dans le fichier dans le dossier
lib

. C'est possible?

J'ai essayé d'inclure cette ligne dans ma classe:


include Rails.application.routes.url_helpers


Mais ça me donne une erreur

Aucun hôte pour la communication! Veuillez spécifier: hôte ou définir default_url_options[:host]


Edit:

J'ai découvert que cela fonctionne si je initie d'abord les itinéraires:


def initialize_routes
if Rails.env.development? || Rails.env.test?
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
elsif Rails.env.production?
Rails.application.routes.default_url_options[:host] = 'example.com'
end
end


Y a-t-il une meilleure façon de le faire? Peut-être configurer des itinéraires dans un fichier de configuration?
Invité:

Alice

Confirmation de:

Décision @JDutil's #3, Comme déjà mentionné dans les commentaires, il est de configurer le programme de messagerie et non des itinéraires du routeur. Cependant, dans la configuration, vous pouvez procéder comme suit:

À
config/environments/development.rb

et
config/environments/test.rb

années :


MyApp::Application.configure do
# other configuration ...
config.after_initialize do
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
end
end

Francois

Confirmation de:

Pour ce faire, il doit y avoir une paire de solutions.

1/ utilisant root_url Passer par le couple de réception comme suit:


root_url/:host => 'localhost'/


Cependant, cela devrait être fait pour être spécifique à l'environnement.

2/ Vous devez également être capable d'installer des itinéraires. default_url_options, comme:


Rails.application.routes.default_url_options[:host]= 'localhost:3000'


3/ Dans les fichiers de configuration de votre environnement, vous devez installer default_url_options, Comme indiqué dans l'erreur. Par exemple:

À
config/environments/development.rb

an :


config.action_mailer.default_url_options[:host] = 'localhost'


À
config/environments/test.rb

G. :


config.action_mailer.default_url_options[:host] = 'localhost'


À
config/environments/production.rb

G. :


config.action_mailer.default_url_options[:host] = 'production.com'

Christine

Confirmation de:

Si vous comptez sur
url_helpers

Pour quelque chose comme
ActiveModel::Serializers

/au moins une série v0.9.*/, où vous allez générer URLs En dehors du flux principal des demandes/réponses Rails, Vous aurez également besoin d'installer
Rails.application.routes.default_url_options

. Je l'ai fait comme ça


# config/application.rb

config.after_initialize do
Rails.application.routes.default_url_options = config.action_mailer.default_url_options
end


Assistants url Maintenant accédant à l'hôte par défaut dans des endroits tels que des tâches de fond, etc.

Dominique

Confirmation de:

J'avais exactement le même problème et aucune des propositions pour la configuration n'a fonctionné. Qui m'embarrassait est que url_helpers Travaillez parfaitement avec d'autres parties de l'application. /En particulier, avec des assistants/. Par conséquent, je n'ai pas besoin d'insérer une nouvelle configuration pour pouvoir les utiliser ailleurs.

Ma décision à la fin de la journée était de faire cela:


Rails.application.routes.url_helpers.athlete_url/athlete/


Ce que je soupçonne, bien que je ne puisse pas prouver, c'est ce que l'inclusion d'assistants url manuellement avec:


include Rails.application.routes.url_helpers


provoque effectivement l'exécution d'un bloc
included

. Cela modifie la configuration du code qui tente de l'utiliser. Non compris, mais au lieu de faire référence directement à cela, tout blocs 'included' Ne pas réexécuter.

J'aimerais savoir si quelqu'un pouvait expliquer si je le trouve sur la bonne voie ou simplement faire de fausses hypothèses.

Cependant, par conséquent, référence à url_helpers pleinement au module/La classe a fait son travail.

Pour répondre aux questions, connectez-vous ou registre