繁体   English   中英

Rails Rake 任务 - 通过将 model 名称和 ID 作为参数传递来删除记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM