Rails路由约束问题/错误或功能?

问题描述 投票:0回答:1

我在GitHub上提出了这个路由问题,但没有在那里找到任何接收者,所以在这里向人群伸出援手。

基本上,这个问题涉及特定路线上的constraints:何时在更高阶constraints:的背景下使用。

https://github.com/rails/rails/issues/35295

ruby-on-rails ruby-on-rails-5 rails-routing
1个回答
1
投票

内部约束覆盖外部约束。

关于这一点有几个github问题,例如https://github.com/rails/rails/pull/19075#issuecomment-92028613

所以你的constraints: ->(request) { request.format.html? }“禁用”constraints subdomain: 'admin'因此所有请求直接转到匹配的第一个get '*path', to: 'home#show'

您可以轻松地测试这只是改变两者的顺序,你将总是在App::HomeController#show

如果你删除constraints: ->(request) { request.format.html? }然后请求最终在正确的控制器,但然后失去强制html。对于两个约束,你可以尝试沿着这些线。使用here描述的约束模块。

module CustomAdminConstraint
  def self.matches? request
    request.subdomain.present? && request.subdomain == 'admin' && request.format.html?
    # possible short form
    # request.subdomain&.== 'admin' && request.format.html?
  end
end

module CustomAppConstraint
  def self.matches? request
    request.subdomain.present? && request.subdomain == 'app' && request.format.html?
  end
end

# routes.rb
constraints CustomAdminConstraint do
  namespace :admin, path: nil do
    get '*path', to: 'home#show'
  end
end

constraints CustomAppConstraintdo
  namespace :app, path: nil do
    get '*path', to: 'home#show'
  end
end

但请注意,未来的其他格式实施起来比较棘手。 Phew ......真是个好车

© www.soinside.com 2019 - 2024. All rights reserved.