我对 Devise 和 paranoia(acts_as_paranoid) gem 有一个复杂的问题。我的用户模型比较简单:
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, :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
行添加到 User 模型中。我的数据库在当前状态下很好,但我正在尝试重置我的数据库以将其与生产数据同步,这就是我遇到问题的地方。当我执行 db:reset 时,上述迁移失败:
PG::UndefinedColumn: ERROR: column users.deleted_at does not exist
问题是我的模型包含一个acts_as_paranoid
仅对当前数据库快照有效的指令。如果我回滚到以前的数据库快照User::deleted_at
不存在,偏执狂 gem 仍会尝试仅更新未删除的对象,并且我的查询失败。
关于处理这种情况的优雅方式有什么想法吗?