У меня есть данные ниже, я пытаюсь обновить мои Модели. Данные это GraphQL. Компания может иметь несколько partners: []
(он же Персона), а partner
может иметь несколько addresses[]
. Я хочу обновить Person.addresses
с помощью addresses: []
значений.
mutation updateCompanyPartner {
updateCompanyPartner(input: {
uuid: "4c537bd6-cfd5-4141-aefe-9fcaeaffbe51"
partners: [
{
firstName: "Elon"
lastName: "Musk"
emailAddress: {
value: "elon@musk.com"
}
addresses: [
{
lineOne: "10 New World str."
},
{
lineOne: "10 Old World str."
}]
},
{
firstName: "Vladimir"
lastName: "Putin"
emailAddress: {
value: "vladimir@putin.com"
}
addresses: [
{
lineOne: "10 Crimea str."
},
{
lineOne: "10 Tsar str."
}]
}
]
})
}
Сначала я повторяю все операции над partners[]
, а затем проверяю, существует ли value: "elon@musk.com
.
Если это так, я нахожу специфику c Лицо, которому принадлежит это письмо (person = email_address.party.specific
).
Далее я хочу перебрать каждый person.addresses.map
и обновить с помощью addresses[]
. Приведенный ниже код является попыткой достичь того, чего я хочу, однако итерация не выполняется должным образом. Причина, почему он не выполняется так, как ожидалось, ясна, однако я не могу понять, как мне сформировать итерацию, чтобы она корректно обновляла значения?
def create(args)
partners_data = args[:partners]
partners_data.map do |params|
email_address_data = params[:email_address]
addresses_data = params[:addresses]
email_address = EmailAddress.find_by(value: email_address_data[:value])
if email_address.present?
person = email_address.party.specific
person.addresses.map do |address|
addresses_data.map do |address_data|
address.update!(address_data) # This part is wrong, shouldn't be iterating this way.
end
end
else
...
end
end
end