遍历散列并在 Ruby 中找到要删除的记录

Loop through hash and find records to delete in Ruby

我通过观看一些视频和阅读博客来自学 ruby。我目前处于一种情况,我必须将从外部 CRM 系统接收到的以下参数解析为 RUBY 并从数据库中找到相关记录并将其删除。当我通过以下代码获得一条记录时效果很好:

temp_id = params[:salesforce_id]
Table.find_or_initialize_by(:id => temp_id).destroy

但是当我必须像下面这样解析多条记录时,我遇到了这个错误"ArgumentError (wrong number of arguments (given 0, expected 1)):"我可能不得不循环遍历它,但是任何示例代码都会有帮助。

{"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}], "delete_record"=>{"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}]}}

谢谢

尝试使用:

temp_id = {"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}], "delete_record"=>{"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}]}}

temp_id["delete_record"]["_json"].pluck("id").each do |x|
  Table.find_or_initialize_by(:id => x.to_i).destroy
end

您拥有的结构是一个 Hash (A),它有一个键 "_json" 和一个对应于 Hash (B) 值的键 "delete_record"。此 Hash 包含一个 key/value 对,其中 "_json" 作为键,一个 Array 作为值。此 Array 包含(多个)Hash (C) 个对象。

你要的是:

  1. 获取键 "delete_record" 的哈希 (A) 中的值,即哈希 (B)
  2. 获取键 "_json" 的哈希 (B) 中的值,这是一个哈希对象数组 (C)
  3. 对于数组中的每个哈希 (C),获取键 "id" 的值。

您可以执行以下操作:

data = {
  "_json"=>
    [{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}], 
  "delete_record"=>
    {"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}]}
}
# step 1
data_for_delete_record_key = data['delete_record']
# step 2
array_of_hashes_with_id_key = data_for_delete_record_key['_json']
# step 3
ids_to_destroy = array_of_hashes_with_id_key.map { |hash| hash['id'] }

然后,您可以简单地使用以下方法销毁匹配记录:

Table.where(id: ids_to_destroy).destroy_all