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

问题描述 投票:0回答:3

我打算编写一个通用的 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 }

我已经尝试过这个,但是这不会返回错误消息,也不会执行操作,我在这里缺少什么?

ruby-on-rails rake-task
3个回答
1
投票

尝试使用

Object.const_get(model)
加载模型,然后它将读取“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']

0
投票

我需要拆分字符串数组,然后将其映射到整数

ids = params[:ids].tr('[]', '').split(' ').map(&:to_i)

0
投票

您将发送一个字符串作为

ids
参数而不是数组。您的
params
应如下所示:

params = { ids: [532], model_name: Shop }
© www.soinside.com 2019 - 2024. All rights reserved.