2014-11-22 61 views
0

尝试接收域请求并将其路由到控制器的索引操作。基于请求的Rails重定向

该域作为@site.host存储在数据库中。一个站点通过@ site.controller指定给一个控制器。
应用控制器提取主机

@site ||= if match = request.host.match(/.*?([^.]+\.[^.]+\.[^.]+$)/) 
    domain = match[1] 
    Site.find_by_host(domain) 
end || Site.find(:first) 

但下面失败:

if request.url.split('?').first == ("https://" + @site.host) 
    redirect_to :controller => @site.controller, :action => 'index' 
end 
+0

你不必手动匹配这个东西。查看'request.protocol','request.host','request.url','request.port','request.host_with_port','request.domain','request.subdomain' – 2014-11-23 11:20:58

+0

这些帮助很大。但是,我仍然需要删除域之前的所有内容,以便与db值进行比较。 – Jerome 2014-11-23 12:11:26

回答

0

一种解决方案是通过数据库生成的会话值然后将其相对于该请求,并相应地重定向

r_host = session[:host] + "/" 
r_host_n = session[:host] 
if request.url.split("//").last == (r_host || r_host_n) 
    redirect_to :controller => session[:controller], :action => 'index' 
end