Вы звоните ActiveRecord :: Base # clone , а не Object # clone.
ActiveRecord :: Base # clone по сути создает новый экземпляр модели, копирует хэш атрибутов и удаляет ключ id. По сути дела, то, что предлагает Люк Франци.
Я уверен, что это проблема PostgreSQL. Потому что этот код работает с MySQL.
@clone = @original.clone
@clone.save
Ошибка, которую вы имели, может быть связана с тем, как PostgreSQL обрабатывает автоинкремент. Я не могу сказать, пытается ли ActiveRecord передать неопределенный идентификатор в операторе INSERT, когда это не должно быть, или что-то пошло не так с определением.
Я не знаю достаточно о postge, чтобы диагностировать проблему. Но я подозреваю, что корень вашей проблемы может быть в миграции, определяющей вашу таблицу.
Из любопытства, что является результатом Model.new(@original.attributes) == @original.clone
?