我打算撰寫一個通用的 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 }
我已經嘗試過了,但這不會回傳錯誤訊息,也不會執行操作,我在這里缺少什么?
uj5u.com熱心網友回復:
嘗試加載模型,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']
uj5u.com熱心網友回復:
您正在發送一個字串作為ids引數而不是一個陣列。你params應該看起來像這樣:
params = { ids: [532], model_name: Shop }
uj5u.com熱心網友回復:
我需要拆分字串陣列,然后將其映射到整數
ids = params[:ids].tr('[]', '').split(' ').map(&:to_i)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/473764.html
