我几天前问了一个类似的问题,但我意识到我没有问过这个问题。
在使用Manager和Employee模型的Rails应用程序中,让我们说所有经理都是员工,但并非所有员工都是经理。我需要一个解决方案,让用户能够充当经理和员工,两者都有不同的属性和方法。
我被告知使用单表继承,这非常有用,但它同时为用户提供了两者的属性。我希望用户(不是每个用户)能够充当经理和员工,但不能同时兼顾两者。 因此,一些用户既可以是经理也可以是员工,但不能兼顾两者。有些用户只能是员工。
关于我应该使用什么关系的任何想法?
答案 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)"