我有一个 Rails 3 站点,它在各种不同的域上运行,并希望在我的一个模型中使用 _set_table_name 来根据请求的域动态更改表名。这可能吗?
问问题
684 次
2 回答
0
set_table_name
已弃用,取而代之的是table_name=
. 用它:
SomeModel.table_name = request.subdomain=='foo' ? 'foos' : 'bars'
于 2012-05-09T20:05:13.990 回答
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
于 2014-04-11T16:13:46.023 回答