Rails中的多态和类型更改

时间:2011-06-29 16:31:31

标签: ruby-on-rails activerecord

我的应用中的用户模型类似于

belongs_to :account, :polymorphic => true, :dependent => :destroy

还有一些特殊帐户类型,例如Admin或Editor

class Admin < ActiveRecord::Base
  has_one :user, :as => :account, :dependent => :destroy
end

class Editor < ActiveRecord::Base
  has_one :user, :as => :account, :dependent => :destroy
end

是否有任何干净的方法可以将用户类型从编辑器更改为管理员?如果我做了像

这样的事情
admin = Admin.new
User.first.account = admin
user.save
admin.save

数据库中的编辑器类型仍有一个旧条目。

1 个答案:

答案 0 :(得分:0)

使用:dependent => :destroy只会在对象本身被销毁时删除关联的对象。您不会破坏用户记录,只是更改其中一个属性,因此永远不会触发此功能。

要自己销毁它,请执行类似

的操作
user = User.first
user.account.destroy
user.account = Admin.create
user.save