2013-02-27 71 views
1

後的主鍵,我不是很確定問題所在,但是當試圖創建一個(通用)玩笑(模型)我得到以下錯誤:的Rails似乎沒有隨機部署

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)。我只能創造一個笑話。在部署之前,我從來沒有遇到過這個問題,我能想到的唯一值得注意的事情是數據庫類型,從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 
+0

你爲什麼要這麼做? – 2013-02-27 16:51:59

回答

2

你的關鍵是太大。您只能在該ID字段中放置一個32位(帶符號)的整數。不知道爲什麼你想創建自己的主鍵,但不管怎麼樣,試試這個:

self.id = SecureRandom.random_number(1000_000_000) 

順便說一句(2^32)/ 2 -1 = 2147483647

+0

現貨,謝謝!將在4分鐘內接受=) – ZirconCode 2013-02-27 16:58:36

+1

沒問題,但我不知道爲什麼你要創建自己的主鍵?你可以讓MySQL做它的事情,併爲你創造它們。無論如何,很樂意幫助 – rainkinz 2013-02-27 17:05:13

+0

啊,我希望他們以特定的方式分配id,隨機化只是一個佔位符=) – ZirconCode 2013-03-01 13:49:33