1

我有一个 Rails 3 站点,它在各种不同的域上运行,并希望在我的一个模型中使用 _set_table_name 来根据请求的域动态更改表名。这可能吗?

4

2 回答 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 回答