2012-05-09 45 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