设计 - 自动删除在定义的时间段后尚未确认的帐户

Luc*_*cas 4 ruby-on-rails devise ruby-on-rails-3

一切都在标题中,我希望能够删除一段时间后尚未确认的帐户.

我正在使用:

  • Rails 3.0.5
  • 设计1.3.4

我的Devise User模型具有以下属性:

devise :database_authenticatable, :confirmable, :registerable, :recoverable, :rememberable, :trackable, :validatable
Run Code Online (Sandbox Code Playgroud)

和我的 db/schema.rb

create_table "users", :force => true do |t|
    t.string    "email",                                 :default => "", :null => false
    t.string    "encrypted_password",     :limit => 128, :default => "", :null => false
    t.string    "reset_password_token"
    t.timestamp "reset_password_sent_at"
    t.timestamp "remember_created_at"
    t.integer   "sign_in_count",                         :default => 0
    t.timestamp "current_sign_in_at"
    t.timestamp "last_sign_in_at"
    t.string    "current_sign_in_ip"
    t.string    "last_sign_in_ip"
    t.timestamp "created_at"
    t.timestamp "updated_at"
    t.string    "confirmation_token"
    t.timestamp "confirmed_at"
    t.timestamp "confirmation_sent_at"
  end
Run Code Online (Sandbox Code Playgroud)

小小的奖励 - 在我的User模型中,我已经指定了我的数据之间的关系,例如:

has_one  :user_content,     :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)

我想确保其子项也被删除.

非常感谢任何可以提供帮助的人!


感谢jrdi,这是SQLite 3数据库的答案

desc "Delete all unconfirmed users after 7 days"
task :delete_unconfirmed_users => :environment do
  users = User.all(:conditions => 'confirmed_at is NULL AND confirmation_sent_at <= datetime(\'now\',\'-7 days\')')
  users.each do |user|
    user.destroy
  end
end
Run Code Online (Sandbox Code Playgroud)

对于PostGRE(Heroku)

desc "Delete all unconfirmed users after 7 days"
task :postgre_delete_unconfirmed_users => :environment do
  users = User.all(:conditions => 'confirmed_at is NULL AND confirmation_sent_at <= current_date - integer \'7\' ')
  users.each do |user|
    user.destroy
  end
end
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅他的回答 谢谢@很多他.

dec*_*cay 10

例如,您可以使用守护程序cron运行rake任务.

在这个rake中,您可以获得所有未确认的用户(:confirmed_atnil),并在发送确认电子邮件时获取:confirmation_sent_at

当您拥有符合especifications make的用户时,user.destroy应正确删除所有用户.

如果你需要这个rake任务的一个例子告诉我,我做你的第一个aproximation.

---编辑---

在lib/tasks中创建一个delete_unconfirmed_users.rake

desc "Delete all unconfirmed users after 7 days"
task :delete_unconfirmed_users => :environment do
  users = User.all(:conditions => 'confirmed_at is NULL AND confirmation_sent_at >= DATE_SUB(NOW(), INTERVAL 7 day)')
  users.each do |user|
    user.destroy
  end
end
Run Code Online (Sandbox Code Playgroud)

rake delete_unconfirmed_users

  • 我做的另一个改变是`> =`变为`<=`.但它完美无缺.再次感谢 ;) (2认同)