我有一个用户模型和一个公司模型。许多公司的用户很多。这适用于普通用户。对于具有管理能力的用户来说,这并不是那么好。管理员需要查看所有公司。我宁愿不必将所有公司分配给管理员。
目前,我正在使用我的模型中的方法:
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 :(得分: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
答案 1 :(得分: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