在rails中转换模型(单表继承)

时间:2012-01-24 19:54:11

标签: ruby-on-rails inheritance model single-table-inheritance

假设我有两种类型的用户AB。类型为B的用户在字段上具有较少的权限和较少严格的验证(更多可以为空)。否则,它们与类型A基本相同。这个事实使我倾向于使用单表继承。

以下是我的问题 - 类型B用户可以升级到A类型。升级时,应保留所有相关记录。是否有一种简单的方法可以使用STI从一种模型类型转换为另一种模型类型,从而保留所有关联?你能给出一个简单的例子吗?

2 个答案:

答案 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 APISingle Table Inheritance

的更多详情

感谢

答案 1 :(得分:-1)

也许您只能拥有一个带有类型字段的用户模型,验证取决于类型。

class User
  validates :name, presence: true, if: :advanced_user?

  protected

  def advanced_user?
    self.type == 2
  end
end