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
这就是我想知道的。任何人都有答案?我的猜测是它是线程安全的,但这只是一个猜测。 –
我不觉得这可能是线程安全的。此方法旨在每个类(类加载时)使用一次,而不是每个请求动态使用。 –