Rails apartment gem config.excluded_models包含join_table users_roles

时间:2013-06-05 07:48:20

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

根据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列表中包含它?

2 个答案:

答案 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_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" ]