公寓宝石:如何重命名租户?

时间:2015-12-15 06:40:21

标签: ruby-on-rails-4 multi-tenant apartment-gem

我们是否可以在 apartment-gem 中重命名租户,或者我们必须删除租户并创建一个新租户才能实现此目标。

请提供一些建议

2 个答案:

答案 0 :(得分:5)

我不认为这可以通过apartment gem获得,但是使用SQL查询相当简单。这取决于你的设置。

如果您正在为每个租户使用带有架构的Postgresql:

ALTER SCHEMA old RENAME TO new;

如果您使用的是MySql,则应重命名租户的表名前缀。如果数据库位于同一文件系统上,这应该有效:

RENAME TABLE current_tenant.table TO new_tenant.table;

免责声明:未经测试。

答案 1 :(得分:2)

您可以更改名称(在我的情况下是子域名),执行以下操作:

1)您的架构应该是租户模型中的一些唯一列(schema_id很好)。我从子域和租户ID生成它的值。 2)在apartment.rbrequire "apartment/elevators/generic"。然后

config.tenant_names = -> { Tenant.pluck :schema_id }

所以你使用租户名称之类的架构。 然后在文件底部添加

Rails.application.config.middleware.use "Apartment::Elevators::Generic", lambda { |request|
  Tenant.find_by(subdomain: request.host.split(".").first).schema_id
}

现在,在您提出正确的子域请求后,您或您的租户用户可以编辑名称/子域名,并且模式中的数据将是安全的。

PS:另见 - https://github.com/influitive/apartment/issues/242