Rails模型关系,用户角色

时间:2014-07-06 18:42:06

标签: ruby-on-rails orm

我几天前问了一个类似的问题,但我意识到我没有问过这个问题。
在使用Manager和Employee模型的Rails应用程序中,让我们说所有经理都是员工,但并非所有员工都是经理。我需要一个解决方案,让用户能够充当经理和员工,两者都有不同的属性和方法。

我被告知使用单表继承,这非常有用,但它同时为用户提供了两者的属性。我希望用户(不是每个用户)能够充当经理和员工,但不能同时兼顾两者。 因此,一些用户既可以是经理也可以是员工,但不能兼顾两者。有些用户只能是员工。

关于我应该使用什么关系的任何想法?

1 个答案:

答案 0 :(得分:0)

您可以像这样使用STI:

结构

create_table :users do |t|
  t.string :name
  t.string :type # index this
end

class User < ActiveRecord::Base
  # attributes -- name, type

  def to_s
    "#{name} (Generic User)"
  end
end

class Manager < User
  def to_s
    "#{name} (Manager)"
  end
end

class Employee < User
  def to_s
    "#{name} (Employee)"
  end
end

实施例

puts User.new(name: "Mr User")
# => "Mr User (Generic User)"

puts Manager.new(name: "Mr Manager")
# => "Mr Manager (Manager)"

puts Employee.new(name: "Mr Employee")
# => "Mr Employee (Employee)"