gpt4 book ai didi

ruby-on-rails - Rails act_as_paranoid 迁移问题

转载 作者:行者123 更新时间:2023-12-04 23:49:03 28 4
gpt4 key购买 nike

我对 Devise 和 paranoia(acts_as_paranoid) gem 有一个复杂的问题。我的 User 模型比较简单:

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

我首先在没有可确认选项的情况下添加了设计 gem。然后我后来在此迁移中添加了可确认选项:
def up
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_token, :string
add_column :users, :confirmation_sent_at, :datetime
add_column :users, :unconfirmed_email, :string

add_index :users, :confirmation_token, unique: true

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

到目前为止没有问题。然后我添加了 Paranoia gem 和 acts_as_paranoid线到用户模型。我的数据库在当前状态下很好,但我正在尝试重置我的数据库以将其与生产数据同步,这就是我遇到问题的地方。当我执行 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) 更新我的旧迁移解决了这个问题。 (好吧 - 我的模型版本)。

如果您希望已删除_at 设置的用户不设置confirmed_at,则可能不起作用;对我来说,我并不真正关心删除的用户是否设置了这个字段(对我来说 - 这只是开发/测试中的一个问题,通常发生在没有记录的地方)。

毕竟这一切 - 我想我可能是时候看看 using seeds or a gem for DML migrations

关于ruby-on-rails - Rails act_as_paranoid 迁移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278581/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com