Я боролся с тонкостями, которые ожидает помощник от контроллера и стека по умолчанию (default_url_options
и т. Д.), И не хотел жестко кодировать хост.
Наши URL-помощники предоставляются нашим отличным модулем, конечно:
include Rails.application.routes.url_helpers
Но включите это как есть, и (1) помощник будет искать default_url_options
, и (2) не будет знать ни о хосте запроса, ни о запросе.
Часть хоста происходит от экземпляра контроллера url_options
. Следовательно, я передаю контекст контроллера в мой прежний модуль, теперь класс:
class ApplicationController
def do_nifty_things
HasAccessToRoutes.new(self).render
end
end
class HasAccessToRoutes
include Rails.application.routes.url_helpers
delegate :default_url_options, :url_options, to: :@context
def initialize(context)
@context = context
end
def render
nifty_things_url
end
end
Может не подходить для каждого случая, но это было полезно для меня при реализации своего рода пользовательского рендерера.
Любым способом:
- если вы хотите получить доступ к параметрам URL по умолчанию или к хосту запроса, вам нужно передать контекст контроллера / запроса в
- Если вам просто нужен путь, без хоста и вам не нужны параметры URL, вы можете просто сделать несколько фиктивных методов.