2011-07-18 50 views
1

activerecord如何爲新創建的記錄分配一個ID? ID值似乎遍佈全球。有時他們是連續的,但有時他們似乎是某種散列。 有沒有辦法控制行爲?Rails如何提供新型號/記錄的ID?

+2

你能展示那些他們是'某種散列'的情況嗎? Rails默認順序地命令它的ID - 請告訴我們你看到的是什麼! – sscirrus

回答

1

在關係數據庫中,您會看到ID通常是順序的。這恰好是一個自動遞增的字段,在默認情況下,這些數據庫使用Rails時稱爲id。這是99%的情況,這意味着99%的時間您可以期望以這種方式完成。這是理智的方式。

但是,在某些情況下,數據庫中的「id」字段可能不會自動遞增,而可能是字符串。在我目前正在使用的數據庫中,id字段被稱爲client_id,是一個6個字符的字符串,例如「RAB001」,需要由代碼本身手動分配。這是由於我們支持的遺留系統,我們沒有辦法解決這個問題。它就是這樣。

在其他數據庫如Mongoid中,id再次自動生成。雖然這裏有一個區別:而不是他們自動遞增數字他們是一個哈希。在Mongo數據庫中,我碰巧得到了方便,其中一個對象的_id字段(注意下劃線)就是這個可愛,易於理解的哈希:4e22b5812f8b7d6f6d000001。這是由Mongo自動生成的,除了當我需要找到一個對象並且沒有其他方式通過另一個唯一值來查找它時,我並不在乎它是什麼。

我建議堅持使用自動生成的ID系統,無論是傳統數據庫系統(如PostgreSQL或MySQL)還是Mongo提供的東西。

任何需要手動生成記錄主鍵的系統都需要有一個巨大的「HERE BE DRAGONS」標籤,並且應該像硝酸甘油或similarly to this apt analogy一樣處理。 如果您可以,請避免使用此係統。


我在這裏被諷刺。

相關問題