假设我有两种类型的用户A
和B
。类型为B
的用户在字段上具有较少的权限和较少严格的验证(更多可以为空)。否则,它们与类型A
基本相同。这个事实使我倾向于使用单表继承。
以下是我的问题 - 类型B
用户可以升级到A
类型。升级时,应保留所有相关记录。是否有一种简单的方法可以使用STI从一种模型类型转换为另一种模型类型,从而保留所有关联?你能给出一个简单的例子吗?
答案 0 :(得分:3)
您需要做的就是确保在type
列中提供了正确的值。
将用户B升级为用户A时,只需将type
属性中存储的值更改为用户A的
班级名称。
例如:
class Staff < ActiveRecord::Base; end
class PartTimeStaff < Staff; end
part_time_staff = PartTimeStaff.first
part_time_staff.type = "Staff"
part_time_staff.save
它会将兼职人员升级为员工班级。
所有关联应保持不变。因为你只有一个实际的sql表。
PartTimeStaff和Staff类的所有属性都保存在同一个表中。
查看Rails API和Single Table Inheritance
的更多详情感谢
答案 1 :(得分:-1)
也许您只能拥有一个带有类型字段的用户模型,验证取决于类型。
class User
validates :name, presence: true, if: :advanced_user?
protected
def advanced_user?
self.type == 2
end
end