Rails Rake 任务 - 通过将模型名称和 ID 作为参数传递来删除记录
Rails Rake Task - Delete records by passing model name and ids as params
我打算编写一个通用的 rake 任务,允许我在将模型名称和 ID 作为输入参数后销毁模型的记录
#lib/tasks/import.rake
task :destroy_model_records, [:params] => :environment do |task, args|
params = args.params.with_indifferent_access
model = params[:model_name]
ids = params[:ids]
model.where(id: ids).destroy_all
end
这是我的参数的样子:
params = { ids:"[532]", model_name: Shop }
我试过了,但这不是 return 错误消息,也没有执行操作,我在这里错过了什么?
您发送的是字符串作为 ids
参数而不是数组。您的 params
应该如下所示:
params = { ids: [532], model_name: Shop }
尝试使用 Object.const_get(model)
加载模型然后它将读取 'where' 方法应该在其上工作的 class。要验证参数,可以使用puts
方法将它们写出来。
#lib/tasks/import.rake
task :destroy_model_records, [:model_name, :ids] => :environment do |t, params|
puts params[:model_name]
puts params[:ids]
model = Object.const_get(params[:model_name])
ids = params[:ids].split(" ")
model.where(id: ids).destroy_all
end
任务可以这样完成:
rails import:destroy_model_records[Shop,'1 2 3']
我需要拆分字符串数组,然后将其映射为整数
ids = params[:ids].tr('[]', '').split(' ').map(&:to_i)
我打算编写一个通用的 rake 任务,允许我在将模型名称和 ID 作为输入参数后销毁模型的记录
#lib/tasks/import.rake
task :destroy_model_records, [:params] => :environment do |task, args|
params = args.params.with_indifferent_access
model = params[:model_name]
ids = params[:ids]
model.where(id: ids).destroy_all
end
这是我的参数的样子:
params = { ids:"[532]", model_name: Shop }
我试过了,但这不是 return 错误消息,也没有执行操作,我在这里错过了什么?
您发送的是字符串作为 ids
参数而不是数组。您的 params
应该如下所示:
params = { ids: [532], model_name: Shop }
尝试使用 Object.const_get(model)
加载模型然后它将读取 'where' 方法应该在其上工作的 class。要验证参数,可以使用puts
方法将它们写出来。
#lib/tasks/import.rake
task :destroy_model_records, [:model_name, :ids] => :environment do |t, params|
puts params[:model_name]
puts params[:ids]
model = Object.const_get(params[:model_name])
ids = params[:ids].split(" ")
model.where(id: ids).destroy_all
end
任务可以这样完成:
rails import:destroy_model_records[Shop,'1 2 3']
我需要拆分字符串数组,然后将其映射为整数
ids = params[:ids].tr('[]', '').split(' ').map(&:to_i)