Rails acts_as_paranoid 迁移问题

kid*_*rew 4 migration ruby-on-rails acts-as-paranoid

我对 Devise 和 paranoia(acts_as_paranoid) gem 有一个复杂的问题。我的用户模型相对简单:

class User < AR::Base
  devise :confirmable, :other_config_options
  acts_as_paranoid
end
Run Code Online (Sandbox Code Playgroud)

我首先添加了 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
Run Code Online (Sandbox Code Playgroud)

到目前为止没有问题。然后我将 Paranoia gem 和acts_as_paranoid线条添加到用户模型中。我的数据库在当前状态下运行良好,但我正在尝试重置数据库以将其与生产数据同步,这就是我遇到问题的地方。当我执行 db:reset 时,上述迁移失败:

PG::UndefinedColumn: ERROR:  column users.deleted_at does not exist
Run Code Online (Sandbox Code Playgroud)

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

有什么想法可以优雅地处理这种情况吗?

Rae*_*nha 5

unscoped使用模型+迁移+acts_as_paranoid时使用。

更新所有用户的行应如下所示:

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

  • 好一个。我不知道“unscoped”存在 (2认同)