Today's the day

向软件大牛炫耀我会焊单片机,向硬件大牛炫耀我会写 Rails,向软硬件大牛炫耀我生物,向软硬件生物大牛炫耀我会折腾期货 -_-bbb

Rails 中生成二级域名

Rails 中的 url_for,默认生成的地址是相对地址,当然你可以传入参数 :only_path => false,这样就能生成完整的地址。

但是有的时候,我们要指定二级域名,比如像 is-programmer.com 这样的多用户 blog,我们要生成 http://galeki.is-programmer.com 或者 http://yyc.is-programmer.com 这样的地址,但是 url_for 只能传入 :host => 'xxx',并没有 subdomain 的选项。

当初找到的第一个解决办法,就是 Url For Domain 插件,安装之后,只要指定 :subdomain => 'xxx' 和 :only_path => false,就会生成带有正确二级域名的完整地址。

但是升级至 Rails 2.0 之后,貌似这个插件和 Rails 有冲突,没法正确运行。

后来折腾了一番,发现解决这个问题很简单,只需要在在 controllers/application.rb 中加入下面的代码,重定义核心的 url_for 方法即可:

  1. def url_for(options = {}, *params)
  2.   if options[:subdomain] then
  3.     options[:only_path] = false
  4.     host = []
  5.     host << options.delete(:subdomain)
  6.     host << request.subdomains[1..-1] if request.subdomains.size > 1
  7.     host << request.domain
  8.     options[:host] = host.join '.'
  9.   end
  10.   return super(options, *params)
  11. end

这样就顺利解决了问题,连 :only_path => false 都不用写,直接传入 :subdomain => 'xxx',就会自动生成带有二级域名的完整地址了~