gpt4 book ai didi

ruby-on-rails - 如何从rails中的数据库中自动删除一条记录

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:37 25 4
gpt4 key购买 nike

我有一个名为 products 的 Rails 表设置,它运行良好,假设我想在创建后 3 周自动删除记录,如何处理代码

我的产品数据库如下

class Products < ActiveRecord::Migration
def change
create_table :products do |t|
t.text :description
t.string :price
t.string :name
t.string :contact
t.attachment :photo
t.string :slug
t.integer :user_id

t.timestamps
end
add_index :products, :user_id
end
end

最佳答案

处理这个任务有不同的方法。检查下面的 2 个选项。

选项 1 - whenever gem

您可以设置一个任务,例如每 30 天运行一次。

1- 生成任务如下:

rails g task posts delete_30_days_old

2- 在您的应用程序中创建一个 ruby​​ 文件

# lib/tasks/delete_old_records.rb
namespace :posts do
desc "Delete records older than 30 days"
task delete_30_days_old: :environment do
Post.where(['created_at < ?', 30.days.ago]).destroy_all
end
end

选项 2 - sidekickSidetiq gem

# in app/workers/clean_posts.rb
class CleanPosts
include Sidekiq::Worker
include Sidetiq::Schedulable

recurrence { monthly }

def perform
Post.recent.destroy_all
end
end

# /models/post.rb
class Post < ApplicationRecord
scope :recent, -> { where('created_at >= :thirty_days_ago', thiryty_days_ago: Time.now - 30.days) }
end

由于 Ruby 是关于美的,所以将 where 子句移动到您的模型中,在哪里可以重用它。

这些选项将从您的数据库中删除旧帖子,您的应用程序将无法再访问它们。

关于ruby-on-rails - 如何从rails中的数据库中自动删除一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com