Rails - 模型中的set_table_name取决于域

时间:2012-05-09 19:48:29

标签: ruby-on-rails

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

2 个答案:

答案 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