2012-01-11 111 views
1

我有一個用戶模型和一個公司模型。許多公司的用戶很多。這對普通用戶非常有用。對於具有管理能力的用戶來說並不是那麼好。管理員需要查看所有公司。我寧願不必將所有公司分配給管理員。has_and_belongs_to_many_relationship但只適用於非管理員用戶

目前,我用我的方法模型中,像這樣:

class Company 
    def self.for_user 
    if User.current.is_admin? 
     Company.all 
    else 
     User.companies 
    end 
    end 
end 

有沒有一種方法,使一個條件的has_and_belongs_to_many關係隊伍?

回答

0

感謝這個問題/答案,我想通了

Modify the behavior of has_many or use scope?

所以,我的協會變成

class User 
    has_and_belongs_to_many :companies do 
    def visible 
     if proxy_owner.can? "company:view_all" 
     Company.scoped 
     else 
     self 
     end 
    end 
    end 
end 

然後你可以用

User.find(x).companies.visible 
0

我不認爲你可以通過向has_and_belongs_to_many方法傳遞任何選項來有條件地定義關係。

我STI的大胖子風扇所以我可能會做這樣的事情:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :companies 
end 

class Admin < User 
    def companies 
    Companies.all 
    end 
end 
+0

不幸的是,我的用戶都是基於類似於CanCan的權限的一個類。否則,這將工作。 – mcmoyer 2012-01-18 21:21:34

相關問題