所有内容都在标题中,我希望能够删除一段时间后尚未确认的帐户。
我正在使用:
- 轨道3.0.5
- Devise 1.3.4
我的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,以下是使用SQLite3的数据库的答案
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
详细信息请参阅他的回答。Thanks@lot对他来说。
您可以制作一个与守护进程(例如cron)一起运行的rake任务。
在这个rake中,你可以获得所有未确认的用户(:confirmed_at
是nil
),并在发送确认电子邮件时获得:confirmation_sent_at
当您有一个符合特定条件的用户时,应将user.destroy
和所有用户正确删除。
如果你需要这个rake任务的例子,告诉我,我做你的第一个近似。
---编辑---
在lib/tasks 中创建delete_uncofirmed_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
运行rake delete_unconfirmed_users