has_and_belongs_to_many_relationship但仅适用于非管理员用户

时间:2012-01-11 23:40:46

标签: ruby-on-rails ruby has-and-belongs-to-many

我有一个用户模型和一个公司模型。许多公司的用户很多。这适用于普通用户。对于具有管理能力的用户来说,这并不是那么好。管理员需要查看所有公司。我宁愿不必将所有公司分配给管理员。

目前,我正在使用我的模型中的方法:

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

有没有办法让has_and_belongs_to_many关系符合条件?

2 个答案:

答案 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