循环遍历哈希并查找要在Ruby中删除的记录

时间:2018-03-20 13:50:39

标签: ruby-on-rails parsing ruby-hash

我通过观看几个视频和阅读博客来自学红宝石。我目前处于以下情况:我必须将从外部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"}]}}

由于

2 个答案:

答案 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)个对象。

你想要的是:

  1. 获取密钥"delete_record"的哈希(A)中的值,即哈希(B)
  2. 获取密钥"_json"的哈希(B)值,这是一个哈希对象数组(C)
  3. 对于Array中的每个Hash(C),获取键"id"的值。
  4. 您可以执行以下操作:

    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