【发布时间】:2015-02-12 13:48:42
【问题描述】:
我有一个 Rails 3.2.x 应用程序,它有两个主要引擎,使用 this configuration 处理来自两个不同域的请求:
Company::Application.routes.draw do
constraints host: ENV['DOMAIN_ONE'] do
mount Core::Engine, :at => '/'
end
constraints host: ENV['DOMAIN_TWO'] do
mount Another::Engine, at: '/'
end
end
我需要从Core::Engine中的页面引用Another::Engine中的路由,例如:
<%= link_to "A Link", another.a_route_url %>
但是,当我的 URL 辅助方法没有生成域为 Another::Engine 的完整 URL 时;相反,助手使用Core::Engine 的域。
我猜default_url_options 会自动设置在Rails::Engine 代码内部的某个位置,并根据引擎的路由约束自动设置host 选项。我的预感是当 any 帮助器在该引擎内的操作中被调用时——即使它是另一个引擎中的 URL 帮助器——帮助器继承当前引擎的 default_url_options。
有没有办法强制在另一个引擎中指定的所有路由使用不同的host 参数而不将host 参数直接传递给助手(即another.a_route_url(host: ENV['DOMAIN_TWO']))?
【问题讨论】:
-
如果我理解正确,您无法使用 engine.named_route 的建议做法,因为它也与安装在根目录的其他引擎冲突?例如,当安装引擎时,引擎路由可以在
_engine.new_sessions_path 下访问。最近在创建引擎时查看了所有这些,Rails 路由存在于 Rails.application.routes (RouteSet) 上。我不知道这是否有很大帮助。 -
不,我使用
another.route_url很好,但返回的完整 URL 使用当前引擎的host,而不是routes中为another引擎指定的host/跨度> -
还有成功吗?你可以在 Rails 引擎中使用初始化器吗?
标签: ruby-on-rails ruby ruby-on-rails-3 routing