2010-11-18 65 views
0

我正在建立一个SAAS解决方案,其中每个帐户都有自己的子域,例如sub1.mydomain.com sub2.mydomain.com和应用程序模板我已经设置了一个标准的2列模板,我想在旁边列中包含每个站点的自定义部分,以及一个自定义style.css文件每个子域。 所以我想知道如何设置这个来显示自定义信息。我想设置一个样式控制器 - 所以它只显示左侧边栏的项目,以及与其关联的每个域名的style.css页面是否有人有任何好主意?使用自定义模板rails3

基本上对于一个静态页面控制器我已经有了这个设置,以及另一个数据库动作 但是,任何提示将不胜感激。

回答

1

看看这个项目我工作:https://github.com/fabiob/guildhost-hosting

您所需要的代码是在app/controllers/application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :load_subdomain 

    def load_subdomain 
    @subdomain = self.request.subdomains[0] || 'local' 
    load_customer 

    raise "Invalid Subdomain: #{self.request.subdomains}" unless @subdomain.present? 
    end 

    def load_customer 
    @customer = Customer.find(@subdomain) 
    end 
end 

而且在app/views/layouts/application.html.erb

<!DOCTYPE html> 
<html> 
<head> 
    <title><%= @customer.name %> @ MySaaS.com.br</title> 
    <%= stylesheet_link_tag :all %> 
    <%= stylesheet_link_tag "/themes/#{@subdomain}/main.css" %> 
    <%= javascript_include_tag :defaults %> 
    <%= csrf_meta_tag %> 
</head> 
<body> 
    ... 
</body> 
</html> 

有一个/public/themes其中驻留有每个子域的定制的文件夹。每个子域有机会定制一个CSS,main.css。如果需要多个CSS文件,则应在main.css上使用@import条款。

+0

谢谢,因为我们现在有过滤器标签,我可以以某种方式退出每个动作找到一个全局ID? @accountid = Account.find_by_subdomain!(request.subdomain).id – tspore 2010-11-19 21:50:03