[英]Rails Rake Task - Delete records by passing model name and ids as params
我打算编写一个通用的 rake 任务,允许我在将 model 名称和 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 }
我已经试过了,但这不会返回错误消息,也不会执行操作,我在这里错过了什么?
尝试用Object.const_get(model)
加载 model 然后它会读取 class,'where' 方法应该在其上工作。 要验证参数,您可以使用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
应该如下所示:
params = { ids: [532], model_name: Shop }
我需要拆分字符串数组,然后将 map 拆分为整数
ids = params[:ids].tr('[]', '').split(' ').map(&:to_i)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.