3

我当前的设置是根据 railscast 389-multitenancy-with-postgresql的多租户应用程序

我正在尝试将设置移动到使用公寓gem,主要是因为它有很好的支持来处理跨多个模式的迁移。

我遇到的问题是我使用 cancan 和 rolify gems 导致我的角色模型有这个连接表:users_roles

role.rb
has_and_belongs_to_many :users, :join_table => :users_roles

我想将这个连接表包含在排除模型的公寓 gem 配置中。这些模型被指定保留在全局(公共)模式中。这是我目前的设置

apartment.rb
config.excluded_models = ["User", "Tenant", "Role" ]

根据关于排除模型的公寓网站: 请注意,模型名称的字符串表示现在是标准

那么,当它不是模型而只是连接表时,如何将 users_roles 表包含在 exclude_models 列表中?

4

2 回答 2

4

我发现组合 rolify 和公寓 gem 的方法是像您所做的那样排除连接模型,并在 rolify 中指定连接表名称,包括public模式。

# apartment.rb

Apartment.configure do |config|
  config.excluded_models = %w{User Tenant Role UsersRole}

  # ...
end


# user.rb

class User < ActiveRecord::Base
  rolify role_join_table_name: 'public.users_roles'

  # ...
end
于 2015-02-01T00:19:00.947 回答
0

我没用过Apartment,但你能从和habtm切换吗?has_manybelongs_to

换句话说,您将拥有:

# table 'users'
class User < ActiveRecord::Base
  has_many :user_roles 
  has_many :roles, :through => :user_roles

  # ...rest of class...
end

# table 'roles'
class Role < ActiveRecord::Base
  has_many :user_roles
  has_many :users, :through => :user_roles

  # ...rest of class....
end

# table 'user_roles'
class UserRole < ActiveRecord::Base
  belongs_to :user
  belongs_to :role

  # ...rest of class...
end

然后在 apartment.rb 中:

config.excluded_models = ["User", "Tenant", "Role", "UserRole" ]
于 2013-08-19T18:09:16.880 回答