как я могу получить значение поддомена в рельсах, есть ли встроенный способ сделать это?
например.
test123.example.com
Я хочу, чтобы test123 был частью URL.
как я могу получить значение поддомена в рельсах, есть ли встроенный способ сделать это?
например.
test123.example.com
Я хочу, чтобы test123 был частью URL.
У Rails 3.0 встроена эта возможность, вы можете получить доступ к субдомену с request.subdomain
.
Вы также можете маршрутизировать на основе субдомена:
class SupportSubdomain
def self.matches?(request)
request.subdomain == "support"
end
end
Basecamp::Application.routes do
constraints(SupportSubdomain) do
match "/foo/bar", :to => "foo#bar"
end
end
Если вы используете 2.3, вам нужно использовать плагин, например subdomain-fu.
account_location также является хорошим плагином. После его использования вы можете найти учетную запись на основе разных поддоменов. И вы можете найти субдомен из url, просто написав
request.subdomains(0).first
в своем коде. В вашем контроллере используйте следующий метод
request.subdomains
Возвращает массив поддоменов
Простой в вашем контроллере просто выполните следующие действия
unless request.subdomains.any?
#No domains available redirect
redirect_to subdomain: 'www'
end
Вы можете использовать плагин SubdomainFu. Этот плагин предоставляет вам метод current_subdomain, который возвращает current_subdomain вашего приложения.
Вы также можете посмотреть этот Railscast
UPDATE
Вы также можете использовать request.subdomains
, это даст вам массив поддоменов.
Для тех, кто хочет получить субдомены на локальном хостинге с помощью WEBrick:
Поместите config.action_dispatch.tld_length = 0
в config/environments/development.rb
, и все должно работать.
Ссылка на сообщение SO здесь: Могу ли я сделать Rails/WEBrick распознавать записи в /etc/hosts в качестве поддоменов (вместо доменов)?
Ссылка на сообщение Github: https://github.com/rails/rails/issues/12438
Если вы работаете со строкой и считаете, что это может быть истинный URI, вы можете сделать это, чтобы извлечь поддомен.
require 'uri'
uri = URI.parse('http://test123.example.com')
uri.host.split('.').first
=> "test123"
Немного поздно для вечеринки, но вот то, что я использовал в более старых версиях рельсов.
subdomain = rquest.subdomains.join('.')
Он должен быть обратно совместим в более новых версиях