2013-06-05 33 views
2

我目前的設置是一個多租戶應用程序爲每個railscast 389-multitenancy-with-postgresqlRails的公寓寶石config.excluded_models包括join_table users_roles

我試圖設置移動到使用apartment寶石主要因爲它有很好的支持,以處理遷移跨多個模式。

我遇到的問題是,我使用的康康舞和rolify寶石導致我學習的榜樣有這個連接表:users_roles

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

正是這種連接表,我想在公寓的寶石包括:配置排除模型。這些模型被指定保留在全局(公共)模式中。這是我的當前設置

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

按照有關排除機型公寓網站: 注意,型號名稱的字符串表示現在是標準

那麼,如何在廣告的users_roles表excluded_models列出它不是一個模型,而只是一個連接表?

回答

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" ] 
+0

這有點晚,但這絕對是一個解決方案。對於我的情況,它涉及到其他一些與habtm相關的寶石,所以這種方式非常受限制。 我過去的解決方案是完全放棄公寓gem並定製整個多租戶流程。作爲學習練習很棒。然後,我可以簡單地從租戶模式中刪除僅位於公共模式中的任何表。 我剛剛再次遇到同樣的問題,所以我正在重新審視這個問題。 –

1

,我發現了rolify和公寓寶石相結合的方式,以排除加盟模型,就像你所做的那樣,並且在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 
+0

這對我來說是個解決方案,因爲看起來Rolify沒有在users_roles連接表上包含「public」模式。我冒昧地將其重命名爲UserRole。 Thanks @troy! – Joe