2011-04-06 71 views
3

在Rails中,我正在尋找一種方法來爲模型的新實例生成內部記錄的自動遞增序列號。我想避免創建特定於數據庫的代碼,而是要有一個無論數據庫如何都能工作的解決方案。我目前的想法是等待模型保存,然後獲取已保存模型的ID並將其作爲序列號的後綴,但是在創建時我必須保存每個記錄兩次。在Rails中,如何爲模型的新實例生成唯一的序列號?

任何想法?

感謝您的期待!

+0

我推薦這樣做的一個原因是,您最終可能會運行多個rails應用程序,並且在所有應用程序中保持一個唯一的號碼,並且多個物理盒子將非常困難。可能有一種方法可以通過數據庫完成你想要的任務。您能否更詳細地瞭解序列號格式和約束條件? – 2011-04-06 16:23:41

+0

感謝您的回覆。序列號將是格式爲PLN-xxxxxx的字符串。我正考慮從「PLN-100000」開始並從那裏增加。 – jklina 2011-04-06 16:42:51

+0

那麼所有記錄都會有PLN-他們的序列號? – 2011-04-06 16:52:24

回答

11

我會建議在模型中構建串行模型。這會讓您更靈活地稍後調整序列號格式,而不會在數據庫中保留唯一的自動增量。使用常規的自動遞增的整數主鍵,然後創建這樣的序列號:

class Product 
    def serial_number 
    "PLN-%.6d" % id 
    end 
end 

所以,如果你有ID的產品= 567例如,你有這樣的序列號:

Product.find(567).serial_number 
=> PLN-000567