Перебрать хеш и найти записи для удаления в Ruby

Я самообучающийся рубин, смотрю несколько видео и читаю блоги. В настоящее время я нахожусь в ситуации, когда мне нужно проанализировать перечисленные ниже параметры, которые я получаю из внешней системы 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 ответа

Решение

Структура у вас есть Hash (A) имея ключ "_json" и ключ "delete_record" соответствует Hash (B) значение. это Hash содержит пару ключ / значение с "_json" в качестве ключа и Array в качестве значения. это Array содержит (несколько) Hash (С) объекты.

То, что вы хотите здесь, это:

  1. Получить значение внутри Hash (A) для ключа "delete_record", который является хэш (B)
  2. Получить значение внутри Hash (B) для ключа "_json", который является массивом объектов Hash (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

Попробуйте использовать:

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
Другие вопросы по тегам