2012-05-09 30 views

回答

0

set_table_name已弃用,因此弃用table_name=。使用方法:

SomeModel.table_name = request.subdomain=='foo' ? 'foos' : 'bars' 
+0

此线程安全吗?看起来如果两个子域在同一时间点击两个线程,模型将在两个线程之间共享table_name。 – Forrest

+0

这就是我想知道的。任何人都有答案?我的猜测是它是线程安全的,但这只是一个猜测。 –

+0

我不觉得这可能是线程安全的。此方法旨在每个类(类加载时)使用一次,而不是每个请求动态使用。 –

0

注意,这是未经测试的代码,但它是我认为是更“与粮”的Rails的概念,它应该是线程安全的部署,其中的事项。

class SomeModel 
    def self.subdomain_class(subdomain) 
    @subdomain_classes ||= {} 
    unless @subdomain_classes[subdomain] 
     @subdomain_classes[subdomain] ||= Class.new(self) 
     @subdomain_classes[subdomain].table_name = "#{self.table_name}_#{subdomain}" # This needs sanitizing, of course 
    end 

    @subdomain_classes[subdomain] 
    end 
end 

class SomeModelsController 
    ... 

    private 
    def CurrentSomeModel 
    SomeModel.subdomain_class(request.subdomain) 
    end 
end