Rails 3 субдомен маршрутизации и URL помощники - PullRequest
1 голос
/ 12 июля 2011

Я сталкиваюсь с проблемами маршрутизации относительно поддоменов в Rails 3 при портировании с Rails 2.3.x + gem subdomain_routes.С гемом subdomain_routes я смог легко сопоставить маршруты по модели, как показано ниже:

# config/routes.rb
map.subdomain :model => :site do |site|
  resources :pages
end

Это приведет к созданию помощников URL, таких как site_pages_url, и может использоваться следующим образом:

# console
@site = Site.find_by_subdomain(“yehuda”)
app.site_pages_url(@site) => http://yehuda.example.com/pages
app.site_page_url(@site, @page) => http://yehuda.example.com/page/routes-rock

В Rails 3 это примерно переводится в:

# config/routes.rb
class SiteSubdomain  
  def self.matches?(request)
    request.subdomain.present? && request.subdomain != 'www' &&
      request.params[:site_id].present?
  end  
end

Blog::Application.routes.draw do
  resources :sites do
    constraints(SiteSubdomain) do
      resources :pages
    end
  end
end

, а перегрузка стандартного url_for должна работать в основном как в subdomain_routes:

module UrlFor

  def with_subdomain(subdomain)  
    subdomain = (subdomain || "")  
    subdomain += "." unless subdomain.empty?  
    [subdomain, request.domain, request.port_string].join  
  end  

  def url_for(options = nil)  
    if options.kind_of?(Hash) && options.has_key?(:subdomain)  
      options[:host] = with_subdomain(options.delete(:subdomain))  
    end  
    super  
  end

end
ActionDispatch::Routing::UrlFor.send(:include, UrlFor)

Однако, помощники URL по-прежнему не генерируютправильный URL-адрес, такой как site_pages_url(@site) #=> <a href="http://www.example.com/pages" rel="nofollow">http://www.example.com/pages</a>, вместо ожидаемого http://yehuda.example.com/pages

1 Ответ

0 голосов
/ 12 июля 2011

Вы назвали класс

SiteSubdomain

Это фактически означает, что ваши маршруты должны иметь SiteSubdomain вместо Subdomain. Изменить на

Blog::Application.routes.draw do
  resources :sites do
    constraints(SiteSubdomain) do
      resources :kases
    end
  end
end
...