在URL帮助程序中的Rails 3中的子域

时间:2011-08-23 16:24:38

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

我正在努力让这个工作,但它继续使用我已经在http://railscasts.com/episodes/221-subdomains-in-rails-3的子域

在我调试的url_for中,它显示了我期望的选项[:host](subdomain.domain.com),但超级只返回没有完整路径的'accounts / sign_up'。这感觉不对。

发生了什么事?这就是我所拥有的:

module UrlHelper

  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

  def set_mailer_url_options
    ActionMailer::Base.default_url_options[:host] = with_subdomain(request.subdomain)
  end

end

我尝试过设计和非设计助手:

  = link_to 'Plan', new_plan_path(:subdomain => 'mysubdomain')
  = link_to "Sign up", new_registration_path(resource_name, :subdomain => 'mysubdomain');

更新 当我遵循代码时,它最终会调用:

_routes.url_for((options || {}).reverse_merge!(url_options).symbolize_keys)

其中

_routes.url_for(options || {}) # -> "/accounts/sign_in"

(url_options).symbolize_keys # -> {:host=>"test.lvh.me:3000", :protocol=>"http://", :_path_segments=>{:action=>"new", :controller=>"devise/passwords"}, :script_name=>""}

仍然不确定如何解决它。

1 个答案:

答案 0 :(得分:4)

原来我想使用'path'help'而不是'url'帮助器:(。所以,为了完成这项工作,你需要使用root_url,而不是root_path等。