【问题标题】:Rails 3 subdomain routing and URL helpersRails 3 子域路由和 URL 助手
【发布时间】:2011-07-12 13:48:38
【问题描述】:

从 Rails 2.3.x + gem subdomain_routes 移植时,我遇到了有关 Rails 3 中子域的路由问题。使用 subdomain_routes gem,我可以通过模型轻松地映射路线,如下所示:

# 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) #=> @987654321@,而不是预期的 http://yehuda.example.com/pages

【问题讨论】:

  • 你有这个问题的消息吗?
  • @chinshr 有任何消息或更新吗?

标签: ruby-on-rails ruby-on-rails-3 routes subdomain


【解决方案1】:

您已将课程命名为

SiteSubdomain

这实际上意味着,您的路由应该有 SiteSubdomain 而不是 Subdomain。修改为

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

【讨论】:

  • 我刚刚纠正了我的问题中的错误。问题是我似乎仍然无法生成正确的路线,例如site_pages_url(@site) #=> http://yehuda.example.com/pages
猜你喜欢
  • 2014-02-27
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多