【发布时间】:2017-04-06 00:02:31
【问题描述】:
我希望路由约束能够让admin.example.com/widgets/ 和example.com/admin/widgets/ 有效地相同,URL 帮助程序admin_widgets_path 基于当前子域指向正确的。但是,无论约束如何,路由助手似乎都只指向一个或另一个。
我做错了吗?这是一个错误吗?有没有更好的方法来解决这个问题?
带有问题示例的 Rails 应用程序已发布here,但相关详细信息如下。
我的config/routes.rb
class Subdomains
# any domain that starts with 'admin.'
def self.admin?
-> (request) { request.host =~ /^admin\./ }
end
# any other domain
def self.primary?
-> (request) { !admin?.(request) }
end
end
Rails.application.routes.draw do
constraints(Subdomains.primary?) do
namespace :admin do
resources :widgets
end
end
constraints(Subdomains.admin?) do
scope module: "admin", as: :admin do
resources :widgets
end
end
root to: "admin/widgets#index"
end
我的app/views/admin/widgets/index.html.erb
<%= link_to "Widgets", admin_widgets_url %>
在此配置中,admin_widgets_url 始终返回 /admin/widgets/,这不是 admin.example.com 上的有效路由,因此单击该链接会导致该子域出现路由错误。如果 admin 子域约束块首先放在路由中,则 URL 帮助程序始终返回 /widgets/,从而断开非管理域上的链接。
否则路由可以工作,但不确定如何让 URL 帮助程序指向正确的。
【问题讨论】:
标签: ruby-on-rails ruby