Как использовать метод вспомогательного маршрута из файла в каталоге lib? - PullRequest
16 голосов
/ 15 февраля 2012

Мне нужно использовать метод root_url из метода, определенного в файле в папке lib. Это возможно?

Я пытался включить эту строку в моем классе:

include Rails.application.routes.url_helpers

но это дает мне ошибку

Отсутствует хост для ссылки на! Пожалуйста, укажите: параметр host или установите default_url_options [: host]


Редактировать: Я обнаружил, что это работает, если я сначала инициализирую маршруты:

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

Есть ли лучший способ сделать это? Может быть, установка маршрутов в конфигурационном файле?

Ответы [ 4 ]

29 голосов
/ 01 мая 2012

@ Решение JDutil # 3, как упомянуто в комментариях, конфигурирует почтовую программу действий, а не маршруты маршрутизатора. Однако в конфигурации вы можете выполнить следующее:

В config/environments/development.rb и config/environments/test.rb:

MyApp::Application.configure do
  # other configuration ...
  config.after_initialize do
    Rails.application.routes.default_url_options[:host] = 'localhost:3000'
  end
end
12 голосов
/ 15 февраля 2012

Для этого должно быть несколько решений.

1) при использовании прохода root_url в параметре хоста, например:

root_url(:host => 'localhost')

Это должно быть сделано для того, чтобы соответствовать конкретной среде.

2) У вас также должна быть возможность установить маршруты default_url_options, например:

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

3) В файлах конфигурации вашей среды вы должны установить default_url_options, как указано в ошибке.Например:

В config/environments/development.rb:

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

В config/environments/test.rb:

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

В config/environments/production.rb:

config.action_mailer.default_url_options[:host] = 'production.com'
6 голосов
/ 27 января 2015

Если вы полагаетесь на url_helpers для чего-то вроде ActiveModel::Serializers (по крайней мере, серии v0.9. *), Где вы будете генерировать URL-адреса вне основного потока запросов / ответов Rails, вы также будете нужно установить Rails.application.routes.default_url_options. Я сделал это так,

# config/application.rb

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

Теперь доступны помощники по URL с хостом по умолчанию в таких местах, как фоновые задания и т. Д. *

1 голос
/ 07 декабря 2016

У меня была точно такая же проблема, и ни одно из предложенных настроек не сработало. Меня смутило то, что url_helpers прекрасно работает с другими частями приложения (особенно с помощниками). Поэтому мне не нужно вставлять новую конфигурацию, чтобы иметь возможность использовать ее в другом месте.

Мое решение в конце дня было сделать это:

Rails.application.routes.url_helpers.athlete_url(athlete)

То, что я подозреваю, хотя я не могу доказать, это то, что вручную включает помощников URL с:

include Rails.application.routes.url_helpers

фактически вызывает выполнение блока included. Это изменяет конфигурацию из-под кода, пытающегося использовать его. Не включая, но вместо этого ссылаясь на него напрямую, любые включенные блоки не выполняются повторно.

Я хотел бы знать, может ли кто-нибудь объяснить, нахожусь ли я на правильном пути или просто делаю ложные предположения.

Суть в том, что обращение к url_helpers с полным путем к модулю / классу завершило работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...