遍历散列并在 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) 个对象。
你要的是:
- 获取键
"delete_record"
的哈希 (A) 中的值,即哈希 (B)
- 获取键
"_json"
的哈希 (B) 中的值,这是一个哈希对象数组 (C)
- 对于数组中的每个哈希 (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
我通过观看一些视频和阅读博客来自学 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) 个对象。
你要的是:
- 获取键
"delete_record"
的哈希 (A) 中的值,即哈希 (B) - 获取键
"_json"
的哈希 (B) 中的值,这是一个哈希对象数组 (C) - 对于数组中的每个哈希 (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