如何关联这些模型(用户、公司),其中用户可以是雇主和雇员



在RubyonRails 4中,我有以下模型:

def User < ActiveRecord::Base
  has_one :company, dependent: :destroy
end
def Company < ActiveRecord::Base
  belongs_to :user
end

所以现在,我希望用户作为雇主能够有一个公司,这个公司可以有很多用户(员工)。

当我以员工身份登录用户时,我希望能够列出他工作的所有公司。

最好的方法是什么?

如果没有更多信息,我不确定能否给您一个完整的工作代码文件,但我认为这是最好的方法。

class User < ActiveRecord::Base
  self.table_name = "users"
  #Define shared associations/methods
end
class Employee < User
  has_and_belongs_to_many :companies
  #Employee only associations/methods
end
class Employer < User
  has_one :company
  #Employer only associations/methods
end
class Company < ActiveRecord::Base
  has_and_belongs_to_many :employees
  belongs_to :employer
end

由于两者都继承自同一个User模型,因此它们将共享一个表。由于两个派生模型都只使用has_x,外键将在另一个表中,这意味着它们可以共享一个没有大量空值的表模式。

同样,我不确定这本身是否可行,但我认为这是一个良好的开端。另一个优点是,通过这样隔离代码,您可以根据人员类型独立地更改功能(例如,您可以在用户上使用通用的日志功能,但对员工和雇主更具体,例如包括他们所关联的一家或多家公司)。


事后我意识到还有另一种方法可以做到这一点。您可以使User与Employee或Employer具有多态关联。然后,您将检查用户记录的类型,然后提取关联并调用该记录上的方法(Employee或Employer)。

我唯一不喜欢这个解决方案的地方是,它涉及3个表,根据我所看到的,你可以用1个表。

最新更新