1
我有一個Rails 3網站,在各種不同的域上運行,並希望在我的模型之一中使用_set_table_name根據請求的域動態地更改表名稱。這可能嗎?Rails的 - set_table_name在模型取決於域
我有一個Rails 3網站,在各種不同的域上運行,並希望在我的模型之一中使用_set_table_name根據請求的域動態地更改表名稱。這可能嗎?Rails的 - set_table_name在模型取決於域
set_table_name
已棄用,因此棄用table_name=
。使用方法:
SomeModel.table_name = request.subdomain=='foo' ? 'foos' : 'bars'
注意,這是未經測試的代碼,但它是我認爲是更「與糧」的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
此線程安全嗎?看起來如果兩個子域在同一時間點擊兩個線程,模型將在兩個線程之間共享table_name。 – Forrest
這就是我想知道的。任何人都有答案?我的猜測是它是線程安全的,但這只是一個猜測。 –
我不覺得這可能是線程安全的。此方法旨在每個類(類加載時)使用一次,而不是每個請求動態使用。 –