ruby-on-rails - 使用单表继承更改 Rails 中 ActiveRecord 类的类型

标签 ruby-on-rails ruby activerecord single-table-inheritance

我有两种类型的类:

BaseUser < ActiveRecord::Base 

User < BaseUser

使用 Authlogic 的身份验证系统作为身份验证。这种继承是使用Single Table Inheritance实现的

如果有新用户注册,我会把他注册为用户。但是,如果我已经有一个具有相同电子邮件的 BaseUser,我想将该 BaseUser 更改为数据库中的一个用户,而不是简单地将所有数据从 BaseUser 复制到用户并创建一个新用户(即使用一个新的ID)。这可能吗?谢谢。

最佳答案

Steve 的答案有效,但由于调用 save 时实例属于 BaseUser 类,因此 User 中定义的验证和回调将不会运行。您可能希望使用 becomes 转换实例方法:

user = BaseUser.where(email: "user@example.com").first_or_initialize
user = user.becomes(User) # convert to instance from BaseUser to User
user.type = "User"
user.save!

关于ruby-on-rails - 使用单表继承更改 Rails 中 ActiveRecord 类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3262415/

相关文章:

ruby-on-rails - rails : How do I send an object along with a form?

ruby-on-rails - Rails 4:调用 ActionMailer 时的 Net::ReadTimeout

ruby - 托管独立的 ruby​​ 脚本

cakephp - MVC : Correct pattern to reference objects from a different model

ruby-on-rails - Rails 3 ActiveRecord where 子句,其中 id 设置或为 null

javascript - 如何在ajax更新div中进行计算?

ruby-on-rails - 如何修复错误 URI(不是 URI?): nil

html - 如何对字符串进行 HTML 编码/转义?有内置的吗?

javascript - 如何获取显示在谷歌搜索右侧的图像链接

ruby-on-rails - 仅包含某些属性