どこに問題があるのか正確にはわかりませんが、(一般的な) ジョーク (モデル) を作成しようとすると、次のエラーが発生します。
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry '2147483647' for key 'PRIMARY': INSERT INTO `jokes` (`content`, `created_at`, `id`, `rating`, `updated_at`) VALUES ('dsfgdsfgdfgd', '2013-02-27 16:33:12', 90650754896700, 0, '2013-02-27 16:33:12')):
app/controllers/jokes_controller.rb:141:in `create'
app/controllers/jokes_controller.rb:140:in `create'
そして、別のものを保存しようとすると:
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry '2147483647' for key 'PRIMARY': INSERT INTO `jokes` (`content`, `created_at`, `id`, `rating`, `updated_at`) VALUES ('dsfgdsfg', '2013-02-27 16:32:23', 29733688655250, 0, '2013-02-27 16:32:23')):
app/controllers/jokes_controller.rb:141:in `create'
app/controllers/jokes_controller.rb:140:in `create'
このエラーは、エントリが重複していることを示しています (主キー 2147483647)。私はこれまでに 1 つのジョークしか作成できません。展開する前にこの問題は一度もありませんでした。変更された唯一の注目すべき点は、データベースの種類が sqlite3 から mysql2 に変わったことです。
以下は、私のジョーク モデルの重要なコード ビットです。
before_create :randomize_id
#...
validates :content, :presence => true
validates :content, :uniqueness => true
#...
private
def randomize_id
begin
self.id = SecureRandom.random_number(100_000_000_000_000)
end while Joke.where(:id => self.id).exists?
end