我通过观看几个视频和阅读博客来自学红宝石。我目前处于以下情况:我必须将从外部CRM系统接收的以下参数解析为RUBY,并从数据库中查找相关记录并删除它们。当我通过以下代码获得单个记录时,它运作良好:
temp_id = params[:salesforce_id]
Table.find_or_initialize_by(:id => temp_id).destroy
但是当我不得不解析下面的多个记录时,我很挣扎,我得到这个错误“ArgumentError(错误的参数数量(给定0,预期1)):”我可能需要遍历这个但是任何示例代码真的会有所帮助。
{"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}], "delete_record"=>{"_json"=>[{"id"=>"1"}, {"id"=>"2"}, {"id"=>"3"}]}}
由于
答案 0 :(得分:0)
尝试使用:
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
答案 1 :(得分:0)
您拥有的结构是Hash
(A),其中包含一个键"_json"
和一个与"delete_record"
(B)值对应的键Hash
。此Hash
包含以"_json"
为键的键/值对,以及Array
作为值。这个Array
包含(几个)Hash
(C)个对象。
你想要的是:
"delete_record"
的哈希(A)中的值,即哈希(B)"_json"
的哈希(B)值,这是一个哈希对象数组(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