加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails acts_as_paranoid迁移问题

发布时间:2020-12-17 02:47:53 所属栏目:百科 来源:网络整理
导读:我有一个复杂的问题与Devise和偏执狂(acts_as_paranoid)宝石.我的用户模型相对简单: class User AR::Base devise :confirmable,:other_config_options acts_as_paranoidend 我首先添加了Devise gem而没有确认选项.然后我在此迁移中添加了可确认选项: def u
我有一个复杂的问题与Devise和偏执狂(acts_as_paranoid)宝石.我的用户模型相对简单:

class User < AR::Base
  devise :confirmable,:other_config_options
  acts_as_paranoid
end

我首先添加了Devise gem而没有确认选项.然后我在此迁移中添加了可确认选项:

def up
  add_column :users,:confirmed_at,:datetime
  add_column :users,:confirmation_token,:string
  add_column :users,:confirmation_sent_at,:unconfirmed_email,:string

  add_index :users,unique: true

  User.update_all(:confirmed_at => Time.now)
end

到目前为止没问题.然后我将Paranoia gem和acts_as_paranoid行添加到User模型中.我的数据库在当前状态下很好,但我正在尝试重置我的数据库以将其与生产数据同步,这就是我遇到问题的地方.当我执行db:reset时,它无法完成上述迁移:

PG::UndefinedColumn: ERROR:  column users.deleted_at does not exist

问题是我的模型包含一个只对当前数据库快照有效的指令acts_as_paranoid.如果我回滚到以前的数据库快照,User :: deleted_at不存在,则paranoia gem仍会尝试仅更新未删除的对象,并且我的查询失败.

有什么想法以优雅的方式处理这种情况?

解决方法

不完全确定这是否是最优雅的解决方案,但我通过使用User.with_deleted.update_all(:confirmed_at => Time.now)更新旧的迁移解决了(嗯 – 我的模型的版本).

如果您希望将deleted_at设置为未设置confirmed_at的用户,则可能无效;对我来说,我并不在乎删除的用户是否设置了这个字段(对我来说 – 这只是dev / test中的一个问题,通常发生在首先没有记录的地方).

在这之后 – 我想我可能是时候看一下using seeds or a gem for DML migrations了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读