Rails"有时候有一个"关系

时间:2012-03-12 20:58:29

标签: ruby-on-rails ruby-on-rails-3

这可能是一个新手问题,但我似乎无法想出一个好的解决方案。我有一个companyhas_many users through groups,也可以是公司的管理员(允许他们编辑公司,但每个用户只有一家公司)。

在Rails中设置它的最佳方法是什么?

我无法在用户表中添加admin字段,因为它不会区分他/她管理的公司。但是如果我做一个company_id字段,那么Rails中的关系会是什么样的(因为它是一种somtimes_has_one关系!)。我可以在没有关系的情况下离开它,但这似乎不合适......

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

根据我的理解,您有一个可能属于某个公司的用户,如果有,它实际上可以管理它。

您可以设置Group,例如company_iduser_idadmin字段(这样您就可以了解哪些用户属于哪个公司,以及如果他们也管理该公司)

对于只属于一家公司的用户,您可以为每两列添加唯一性验证(company_iduser_id

您可以通过

获得一家公司的管理员
class Company < ActiveRecord::Base
  has_many :groups
  has_many :users, through: :groups
  has_many :administrators, through: :groups, source: :user, conditions: ["groups.admin = ?", true]
end

并为所有用户致电company.administratorscompany.users

您也可以执行类似

的操作
class User < ActiveRecord::Base
  has_one :group
  has_one :company, through: :group
  has_one :administered_company, through: :group, source: :company, conditions: ["groups.admin = ?", true]
end

因此您可以致电user.companyuser.administered_company

依旧......