ActiveRecord Association:一对多的关系

时间:2017-03-26 19:50:52

标签: ruby-on-rails activerecord

CASE

我正在研究一个由下表组成的模型:

  • 用户
  • 公司
  • 评论(加入表格)

我正在寻找的关系是:

  • 用户has_many条评论。
  • 公司has_many评论。
  • 公司has_many用户。
  • 但用户不一定 belongs_to公司。

基本上意味着用户可以登录,引用他们的信息,例如name,last_name等......但是用户可以是一个简单的访问者,也可以是公司的员工。

例如,用户可以选择(但不是强制性的)为自己分配他们当前的公司belongs_to

APPROACH

我在想办法实现这个目标:

创建2个用户表,例如,一个可以是员工另一个访客。但它似乎并未涵盖您更改状态的情况,例如,如果您不想再belongs_to公司,这种方法似乎效率低下。

或者在我的用户表"employee?", :boolean, default: false中使用布尔列。我不知道如何处理这个问题。如何从false切换到true并将用户分配给公司,反之亦然?

问题

是否有办法通过单个用户表来处理status -visitors和employees-并动态地从一个类别切换到另一个类别?

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以通过两个步骤完成:

1.使belongs_to关系可选:

# User model
belongs_to :company, optional: true

2.制定不同访客和员工的范围和方法:

# User model
scope :visitors, -> { where(company: nil) }
scope :employees, -> { where.not(company: nil) }

def visitor?
  company_id.nil?
end

def employee?
  !visitor?
end

那就是它。现在你可以这样做:

User.visitors
User.employees

User.find(id).visitor?