Разработать - автоматически удалять учетную запись, которая не была подтверждена через определенный период времени - PullRequest
4 голосов
/ 09 июня 2011

Все в заголовке, я хочу иметь возможность удалить учетную запись, которая не была подтверждена через установленный период времени .

Я использую:

  • Rails 3.0.5
  • Devise 1.3.4

My Devise User Модель имеет следующие атрибуты:

devise :database_authenticatable, :confirmable, :registerable, :recoverable, :rememberable, :trackable, :validatable

И мой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

Небольшой бонус - в моей модели User я указал отношения между моими данными, например:

has_one  :user_content,     :dependent => :destroy

Я хочу убедиться, чтоего дети также удаляются.

Большое спасибо всем, кто может помочь!


Спасибо 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

Для 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

См. Его ответ для получения полной информации.Большое ему спасибо.

1 Ответ

10 голосов
/ 09 июня 2011

Вы можете создать rake-задачу, которая запускается с демоном, например cron.

В этом рейке вы можете получить всех неподтвержденных пользователей (:confirmed_at is nil) и получить при отправке подтверждение по электронной почте :confirmation_sent_at

Если у вас есть пользователи, соответствующие спецификациям, введите user.destroy, и все они должны быть удалены правильно.

Если вам нужен пример этого грабли, скажите мне, и я сделаю ваше первое приближение.

--- Редактировать ---

Создание файла delete_unconfirmed_users.rake в lib / tasks

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

Выполнить rake delete_unconfirmed_users

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...