使用不同的外键两次引用相同的模型或创建多对多关联

时间:2019-01-16 03:53:07

标签: ruby-on-rails postgresql many-to-many single-table-inheritance

我在Rails中有一个应用程序,其中创建了一个名为User的模型和另一个名为Task的模型。

模型用户的角色有enum,这意味着我可以拥有一个作为客户端或开发人员的用户:

require 'bcrypt'

class User < ApplicationRecord
  has_many :tasks

  enum :role => [
    :client, 
    :developer
  ]

  has_secure_password

  validates_uniqueness_of :document, :email
  validates_presence_of :birthdate, 
                        :credits,
                        :document, 
                        :email, 
                        :name, 
                        :neighborhood, 
                        :phone, 
                        :street, 
                        :street_number, 
                        :zipcode
end

任务模型可以由客户端或开发者管理:

class Task < ApplicationRecord
  enum :priority => [
    :low,
    :medium,
    :high
  ]
  validates_presence_of :description, :title
end

我敢肯定,如果将表User拆分为另外两个表,例如Client和Developer,那会更好,但是它们的属性是相同的,将来,我希望能够快速将角色:client的用户更改为角色:developer,而不必在表Developer中创建记录并销毁表Client中的另一个记录。

我的问题是:考虑良好实践,是否最好在Task模型中插入两个字段,一个称为client_id,另一个称为developer_id,并使用Single-table inheritance或在模型Task和模型User之间创建一个many-to-many relationship,仅检查Task中引用的每个用户的角色?

0 个答案:

没有答案