Использование Rails 4 с GraphQL API.
Я получаю некоторые входные данные через объект, на основе которых я нахожу или инициализирую новые объекты ActiveRecord, которые я хочу сохранить позже.
Пример ввода:
[
{:id=>"192", :internalId=>128, :title=>"Editing"},
{:internalId=>130, :title=>"New"}
]
Как вы можете заметить, некоторые записи уже существуют и имеют ID, нам нужно их обновить.А остальное нам нужно сохранить как новые записи.
Затем у меня есть метод, который просматривает эти значения сообщения:
def posts=(value)
@posts = value.map do |post|
init_post(post)
end
end
def init_post(post)
Post.find_or_initialize_by(
id: post[:id],
title: post[:title],
internal_id: post[:internalId],
)
end
, который вернет два экземпляра модели Post:
[#<Post id: 192, title: "Editing", internal_id: 128, created_at: nil, updated_at: nil>, #<Post id: nil, title: "New", internal_id: 130, created_at: nil, updated_at: nil>]
Наконец, я хочу сохранить обе записи:
def save_posts
posts.each(&:save)
end
, которые будут возвращать:
"#<ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry '192' for key 'PRIMARY': INSERT INTO `posts` ..."
Итак, как мне убедиться, что экземпляры с ID просто обновляютсясуществующую запись, а остальные просто сохранить как новые?