Я смог решить это, хотя это кажется немного хакерским. Понимая, что Rails рассматривает ограничения как истинные или ложные, я установил другое ограничение внутри начальной проверки ограничений поддомена. Он разбивает поддомен на 2 и проверяет первый поддомен, чтобы увидеть, равен ли он «admin». Если true, он перенаправляется к admin/controllers и admin/views (из-за модуля: "admin"), если нет, он перенаправляется к менее конкретным маршрутам, которые не находятся внутри модуля "admin". .
Сначала у меня не было пространства имен :admin, и мои помощники маршрутов были неправильными (маршруты администратора не имели префикса «admin», а менее конкретные маршруты не устанавливались, так как они дубликаты). Как только я добавил namespace :admin и путь: "" (это тоже важно, поскольку удаляет "admin/" из шаблона URI), все заработало!
И последнее, в admin/controllers вам нужно отредактировать метод set_blog, поскольку вместо него интерпретируется «admin.company» (см. admin/blogs_controller.rb).
маршруты.rb
Blog::Application.routes.draw do
constraints(Subdomain) do
namespace :admin, module: "admin", path: "", constraints: lamda { |r| r.subdomain.split('.')[0] == 'admin' } do
match '/', to: 'blogs#show', via: 'get'
...
end
match '/', to: 'blogs#show', via: 'get'
...
end
...
end
Рейк Маршруты:
Prefix Verb URI Pattern Controller#Action
admin GET / admin/blogs#show
...
ПОЛУЧИТЬ / блоги # показать ...
admin/blogs_controller.rb
BlogController < ApplicationController
before_action :set_blog
...
private
set_blog
@blog = Blog.find_by_subdomain!(request.subdomain.split('.')[1])
end
end
Дайте мне знать, если есть что-то более чистое, если нет, надеюсь, это поможет другим решить эту проблему.
person
bigLund8
schedule
30.04.2014