根据railscast,我目前的设置是多租户应用 389-multitenancy-with-postgresql
我正在尝试将设置移动到使用apartment 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表不是模型而只是一个连接表,我如何在excluded_models列表中包含它?
答案 0 :(得分:3)
我发现组合rolify和apartment gems的方法是像你一样排除连接模型,并在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
答案 1 :(得分:0)
我没有使用过公寓,但您可以从habtm
切换到has_many
和belongs_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" ]