导轨关联技术

时间:2014-01-30 03:47:56

标签: ruby-on-rails ruby activerecord ruby-on-rails-4 rails-activerecord

我有一个用户模型,其中他们是管理员和经理状态的两个布尔值,每个经理只能创建一个作业,每个作业可以有很多管理员。我为具有其属性的工作制作了一个模型。我需要一种方法来处理经理用户和工作模型之间的关系。我的问题是,我不需要具有管理员或没有经理状态的用户与工作模型建立关系,如何实现?

2 个答案:

答案 0 :(得分:1)

你有没有想过Single Table Inheritance?您必须将type column和job_id列添加到users表

class User < ActiveRecord::Base
end

class Manager < User
  belongs_to :job
end

class Admin < User
end

class Job < ActiveRecord::Base
  has_many :managers
end

答案 1 :(得分:1)

class User
  attr_accessible :is_admin, :is_manager, job_id

  belongs_to :job
  validate :only_manager_belongs_to_job

  private

  def only_manager_belongs_to_job
    if !is_manager && job_id
      errors.add(:job_id, "Only a manager can have a job")
    end
  end
end

class Job
  has_many :managers, class_name: "User"
end

STI对此(以及它用于的大多数其他事情)都是过度的。