我有一个Rails 3站点,可以在不同的域上运行,并希望在我的一个模型中使用_set_table_name根据请求的域动态更改表名。这可能吗?
答案 0 :(得分:0)
set_table_name
,而是table_name=
。使用它:
SomeModel.table_name = request.subdomain=='foo' ? 'foos' : 'bars'
答案 1 :(得分: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