Я пытаюсь сравнить данные в моей базе данных со списком, который я получаю от службы. Я использую find_or_initialize_by, потому что я хочу создать элемент, если он не существует и , если он существует, я хочу обновить значение, прежде чем сохранить его. Итак, вот блок кода, который я написал до сих пор:
linkedin_client.groups.each do |group|
linkedin_group =
linkedin_groups.find_or_initialize_by_group_id(group.id) do |g|
g.group_name = group.group.name
g.membership_state = group.membership_state.code
end # find_or_create
# update membership status in case the group already existed
linkedin_group.membership_state = group.membership_state.code
# persist the group
#linkedin_group.valid? ? linkedin_group.save! : linkedin_group.destroy
linkedin_group.save!
Когда я запускаю это, я получаю ошибку Validation failed: Id can't be blank
. У меня вопрос, как мне установить первичный ключ (т.е. идентификатор) при инициализации? Я что-то пропустил в миграции, которая создала таблицу?
Спасибо!
РЕДАКТИРОВАТЬ: ОК, я понял, что было не так. Я добавил validates :id, :presence => true
в модель LinkedinGroup. Снял эту проверку и все хорошо.